ops-itop / itop-extensions Goto Github PK
View Code? Open in Web Editor NEWmy extensions of itop
my extensions of itop
Person类增加公钥和密码(hidden),公钥不为空时,用户在此页面能重置自己的密码,密码用pgp公钥加密后存入密码字段(密码字段隐藏),并发送加密邮件给用户
headers格式不统一,容易出错
在iTop规定headers必须是json格式,然后urlmon.py解析json, 可以保证配置文件的正确
Person类姓名合并
此接口可以方便的用于报警联系人查询
关联的issue #7
计划使用zabbix
1. zabbix auto register配置inventory mode为automatic
2. zabbix 新增user parameter : lld_asset[*],自定义脚本获取assettag(虚拟机为UUID,物理机为serial number), 品牌,型号等
3. zabbix inventory增加这些信息
4. 调用itop api,获取cmdb中记录的所有server的盘点号,去查zabbix中是否已经监控,并获取服务器的主机名、assettag、型号等信息,然后将资产信息及监控状态写回itop
5. 获取zabbix所有机器列表,利用cmdbApi的find.php接口,判断已监控的机器是否录入了cmdb,结果发出邮件。
6. 4,5两个步骤每天夜里执行一次即可,第二天根据邮件人工处理
7. itop新建审计类型,审计监控状态
7. 4,5,两步应提供批量方式和指定assettag方式 (处理完第6步之后,可以手动更新itop审计结果)
vip初始时都可以为tmp_cluster,后续如果vip member机器的cluster确定,那么vip链接的集群应该自动确定
域名,数据库,服务器等资源对applicationsolution可以是多对多的关系,因此统一使用 itop自带的 lnkApplicationSolutionToFunctionalCI来实现,不在使用 外键 方式(此方式一个资源只能归属一个APP,与现实情况不符)。
对于域名,数据库等资源的list现实问题,可以增加一个字符串型field,然后在lnkApplicationSolutionToFunctionalCI中用DoCheckToWrite更新该field
lnkDatabaseToFunctionalCI
SSO登录初始为只读角色。
添加一般角色只能编辑自己的contactid的Person实例
app的联系人列表,域名,数据库的app列表等均不能为空
添加 xxx_count字段(类似服务器all_ip)
在lnk类中写上述对象的 xxx_count字段
域名只与app相关,因此该字段需要首先查询APP所属团队,然后获取团队人员列表,在更新域名的contacts字段,与#2类似,需要在Team及APP类中去更新该字段(APP变更联系团队,或者团队成员变更)
例如app属于一个业务线,业务线有组织,那么app的组织应该自动设定
目前使用DoCheckToWrite()函数来些人Server的all_ip字段(根据 ip_list 字段),但是如果IP链接的设备有更新,all_ip只能等到下次更新Server时才能被更新。所以需要把更新all_ip的功能移到IPAdress类里面。
人员列表不显示 姓
需要限制重复
比如批量查IP,格式为一行一个IP,或者以逗号分隔
定义机架,参考自带的datacenter模块
由于新增或删除lnk类不会触发_list的更新,需要开发delete触发器
详见 #7
DoCheckToWrite函数
$myContactId = UserRights::GetContactId();
$thisContactId = $this->Get('contact_id');
if ($myContactId != $thisContactId && !UserRights::IsAdministrator()){
$this->m_aCheckIssues[] = Dict::Format("Class:lnkContactToApplicationSolution/Error:CanOnlyAddLinkForYourself", $thisContactName);
}
有漏洞,用户可以把其他人的关联更改为自己的关联,$this->Get('')获取的是当前form的值,不是数据库中的值.
简单的处理办法是不允许更新链接类,只允许增加和删除链接。
RT
domain_list TAB,以及all_domain(或者尝试使用OQL查询实现)
在template-base中实现此功能,直接在用户创建工单之后就指派(跳过了审批步骤,因此修改了UserRequest的lifecycle,指派状态的工单可以被拒绝)
根据 周数/人数 的余数来确定指派人。在配置文件中配置,例如:
‘assigned’ => array('person1_id', 'person2_id', 'person3_id')
即,当前周数除length(assigned)余数为0时,分配给person1..以此类推。
另外,某些类型工单可能由某个人做,配置文件:
'special' => array('RDS申请'=>'person1_id', 'Redis申请'=>'person2_id'),
代码中首先读取special,然后判断当前类型是否在special里,如果是,执行special指派,否则,按周排班
class Database extends FunctionalCI
跟all_ip类似(#2)
联系人邮箱唯一
sso登录重复创建联系人问题
目前使用的DoCheckToWrite函数做写入前校验,用户体验较差(可以看到修改按钮,但是不能提交),参考这个库:vbkunin/custom-ticket-fields-access-for-itop,增加GetAttributeFlags 函数,使没有权限的用户看不到修改按钮(DoCheckToWrite不需要删除,可以用作新建时的校验)
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
<classes>
<class id="UserRequest">
<methods>
<method id="GetAttributeFlags" _delta="define">
<static>false</static>
<access>public</access>
<type>Overload-iDisplay</type>
<code><![CDATA[
public function GetAttributeFlags($sAttCode, &$aReasons = array(), $sTargetState = '')
{
$aAttributes = array('description');
if (in_array($sAttCode, $aAttributes) && !UserRights::IsAdministrator())
{
$iCallerID = $this->Get('caller_id');
$iAgentID = $this->Get('agent_id');
$iUserID = UserRights::GetContactId();
if ($iCallerID == $iUserID)
{
return OPT_ATT_READONLY;
}
elseif ($iAgentID == $iUserID)
{
return OPT_ATT_HIDDEN;
}
}
else
{
return parent::GetAttributeFlags($sAttCode, $aReasons, $sTargetState);
}
}
]]>
</code>
</method>
</methods>
</class>
</classes>
</itop_design>
之前的做法是在FunctionalCI的每一个子类中单独定义DoCheckToWrite(),直接检查需要保证唯一性的属性,比较费劲。
可以在抽象类中统一对friendlyname进行检查,这样既可以重用代码,也能解决类似 APP
能重复,但是 业务名称.APP
这样两个属性连接之后保持唯一性的需求(通过naming定义friendlyname使用的属性)
可以用trigger+action-shell-exec代替:
拆分为服务器列表和机架列表
从门户创建事件。
template field包含app,自动关联app到事件,并且自动指派给app负责人
便于用户编辑个人信息
以app为例,friendlyname为 业务线.app
,如果创建一个app为: op.cmdb
,然后在创建一个app: rd.cmdb
,可以成功创建,之后修改 rd.cmdb
, 业务线改为 op
,可以修改成功。
提供一个接口,用于接收cmdb传来的数据,调用telegraf -test
执行之后返回
itop pdf导出用的是tcpdf,在lib/tcpdf目录下。中文乱码是因为没有中文字体。因此添加中文字体即可。
lib/tcpdf/tools/下有个tcpdf_addfont.php 工具,可以用来添加字体
单点登录。
尝试UCenter
新增Typology子类,AlertType
新增类 AlertRule,字段列表
name: 选择一个AlertType
method:ratio,qps,qoq_rise(环比上涨), qoq_fall(环比下降)
qoq_cycle: 小时为单位,根据method 显示或隐藏
threshold: 阈值
app_list: 链接的app
新增 lnkApplicationSolutionToAlertRule
除了app list 外,其他字段对非管理员只读,
lnkApplicationSolutionToAlertRule, 删除前需要检查是否有权限
工具按钮增加一个链接:指派给我
或者调研jira等方案
域名等资源链接到app,app链接到联系人,如果域名也链接到联系人,关系图会显得混乱,因此考虑不适用 lnkContactToFunctionalCI,新建 lnkContactToApplicationSolution
Database变为抽象类,新增子类 RDS, MySQL, MongoDB, Redis等
合并
并且重新设置lnkContactToApplicationSolution的显示字段,实现查询app即可取出联系人的效果。
app名称作为唯一标示,不能随意修改,只能新增或者删除
业务线显示APP列表
支持csv导出,能在list显示。比触发器更好的解决方案。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.