Git Product home page Git Product logo

itop-extensions's Issues

custom-page提供重置服务器密码

Person类增加公钥和密码(hidden),公钥不为空时,用户在此页面能重置自己的密码,密码用pgp公钥加密后存入密码字段(密码字段隐藏),并发送加密邮件给用户

cmdb服务器信息及监控审计

计划使用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链接集群自动插入

vip初始时都可以为tmp_cluster,后续如果vip member机器的cluster确定,那么vip链接的集群应该自动确定

规划

  1. 业务线支持层级,类似组织,单独页面展示层级关系。业务线上下线流程
  2. 所有资源链接到APP,包括服务器,Secret,服务器只关联到一个APP,此APP的联系人为服务器管理员(需修改服务器账号申请逻辑)。APP可以配置依赖项依赖某个服务器,但是只能接收该服务器的报警。人员只关联到APP,不允许人员直接修改负责的APP(通过工单流程)。人员链接配置项允许自行修改,仅做报警使用
  3. APP中增加表单定义关联机器的监控端口,服务器上脚本获取需要监控的端口;报警规则链接到APP,APP下所有机器应用此规则(是否可以实现?)
  4. 链接到APP的配置项自动更新组织为APP的组织

lnkApplicatinSolutionToFunctionalCI 多对多关系

域名,数据库,服务器等资源对applicationsolution可以是多对多的关系,因此统一使用 itop自带的 lnkApplicationSolutionToFunctionalCI来实现,不在使用 外键 方式(此方式一个资源只能归属一个APP,与现实情况不符)。

对于域名,数据库等资源的list现实问题,可以增加一个字符串型field,然后在lnkApplicationSolutionToFunctionalCI中用DoCheckToWrite更新该field

VIP查看member

  1. 添加vip查看member的功能
  2. 同一组VIP(内网,公网)能通过某种方式联系起来)

添加只读角色

SSO登录初始为只读角色。

添加一般角色只能编辑自己的contactid的Person实例

cis_list为空的对象

app的联系人列表,域名,数据库的app列表等均不能为空
添加 xxx_count字段(类似服务器all_ip)
在lnk类中写上述对象的 xxx_count字段

FunctionalCI新增联系人(contacts)字段

域名只与app相关,因此该字段需要首先查询APP所属团队,然后获取团队人员列表,在更新域名的contacts字段,与#2类似,需要在Team及APP类中去更新该字段(APP变更联系团队,或者团队成员变更)

Server的all_ip字段不能自动更新

目前使用DoCheckToWrite()函数来些人Server的all_ip字段(根据 ip_list 字段),但是如果IP链接的设备有更新,all_ip只能等到下次更新Server时才能被更新。所以需要把更新all_ip的功能移到IPAdress类里面。

批量查询

比如批量查IP,格式为一行一个IP,或者以逗号分隔

trigger on-delete

由于新增或删除lnk类不会触发_list的更新,需要开发delete触发器

详见 #7

lnkContactToApplicationSolution更新bug

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的值,不是数据库中的值.

简单的处理办法是不允许更新链接类,只允许增加和删除链接。

工单自动指派(排班)

在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指派,否则,按周排班

权限控制使用GetAttributeFlags函数

目前使用的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>

抽象类中限制friendlyname不能重复

之前的做法是在FunctionalCI的每一个子类中单独定义DoCheckToWrite(),直接检查需要保证唯一性的属性,比较费劲。

可以在抽象类中统一对friendlyname进行检查,这样既可以重用代码,也能解决类似 APP 能重复,但是 业务名称.APP 这样两个属性连接之后保持唯一性的需求(通过naming定义friendlyname使用的属性)

新版本计划

可以用trigger+action-shell-exec代替:

  • url监控新建修改状态变更,用触发器去实时更新,urlmon.py放在cmdbApi/actinos/tasks下也方便管理
  • 使用trigger+action-shell-exec来做资源入库,工单指派。使用增强版portal

functionalci唯一性检查有bug

以app为例,friendlyname为 业务线.app,如果创建一个app为: op.cmdb,然后在创建一个app: rd.cmdb,可以成功创建,之后修改 rd.cmdb, 业务线改为 op,可以修改成功。

itop导出pdf时中文乱码

itop pdf导出用的是tcpdf,在lib/tcpdf目录下。中文乱码是因为没有中文字体。因此添加中文字体即可。

lib/tcpdf/tools/下有个tcpdf_addfont.php 工具,可以用来添加字体

报警自定义阈值

新增Typology子类,AlertType

新增类 AlertRule,字段列表
name: 选择一个AlertType
method:ratio,qps,qoq_rise(环比上涨), qoq_fall(环比下降)
qoq_cycle: 小时为单位,根据method 显示或隐藏
threshold: 阈值
app_list: 链接的app

新增 lnkApplicationSolutionToAlertRule

除了app list 外,其他字段对非管理员只读,
lnkApplicationSolutionToAlertRule, 删除前需要检查是否有权限

联系人应该只对应app

域名等资源链接到app,app链接到联系人,如果域名也链接到联系人,关系图会显得混乱,因此考虑不适用 lnkContactToFunctionalCI,新建 lnkContactToApplicationSolution

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.