コード例 #1
0
 public void 登录(M登录请求 __请求, IPEndPoint __地址)
 {
     if (_登录验证 != null)
     {
         try
         {
             _登录验证(__请求, __地址);
         }
         catch (Exception ex)
         {
             _IT服务端.触发事件(_对象名称, "登录完毕", new Dictionary <string, string> {
                 { "事件参数", HJSON.序列化(new M登录事件 {
                         成功 = false, 设备标识 = __请求.设备标识, 设备类型 = __请求.设备类型, 账号 = __请求.账号, 描述 = ex.Message
                     }) }
             });
             throw;
         }
     }
     _登录缓存[__地址] = new M已登录设备 {
         IP = __地址.Address, 端口号 = __地址.Port, 登录时间 = DateTime.Now, 设备标识 = __请求.设备标识, 设备类型 = __请求.设备类型, 账号 = __请求.账号
     };
     _IT服务端.触发事件(_对象名称, "登录完毕", new Dictionary <string, string> {
         { "事件参数", HJSON.序列化(new M登录事件 {
                 成功 = true, 设备标识 = __请求.设备标识, 设备类型 = __请求.设备类型, 账号 = __请求.账号
             }) }
     });
 }
コード例 #2
0
        public void 新增工程日志(M上报工程日志 __日志)
        {
            var __缓存 = new Dictionary <IPEndPoint, M过滤工程日志>(_工程日志过滤);
            var __匹配 = new List <IPEndPoint>();

            foreach (var __kv in __缓存)
            {
                var __条件 = __kv.Value;
                if (!string.IsNullOrEmpty(__条件.边界类型) && __条件.边界类型 != __日志.边界类型)
                {
                    continue;
                }
                if (!string.IsNullOrEmpty(__条件.边界标识) && __条件.边界标识 != __日志.边界标识)
                {
                    continue;
                }
                if (!string.IsNullOrEmpty(__条件.方向) && __条件.方向 != __日志.方向)
                {
                    continue;
                }
                if (!string.IsNullOrEmpty(__条件.业务标识) && __条件.业务标识 != __日志.业务标识)
                {
                    continue;
                }
                if (__条件.重要性.HasValue && __条件.重要性 > __日志.重要性)
                {
                    continue;
                }
                if (__条件.关键字 != null && __条件.关键字.Count > 0 && (
                        __条件.关键字.All(q => !__日志.描述.Contains(q)) ||
                        __条件.关键字.All(q => !__日志.业务标识.Contains(q)) ||
                        __条件.关键字.All(q => !__日志.边界类型.Contains(q)) ||
                        __条件.关键字.All(q => !__日志.边界标识.Contains(q)) ||
                        (__日志.业务标签 != null && __日志.业务标签.Count > 0 && __条件.关键字.All(q => !__日志.业务标签.Contains(q)))
                        ))
                {
                    continue;
                }
                if (__条件.业务类型 != null && __条件.业务类型.Count > 0 && __条件.业务类型.All(q => __日志.业务类型 != q))
                {
                    continue;
                }
                if (__条件.业务标签 != null && __条件.业务标签.Count > 0 && __条件.业务标签.All(q => __日志.业务标签.Contains(q)))
                {
                    continue;
                }
                __匹配.Add(__kv.Key);
            }
            if (__匹配.Count > 0)
            {
                _IT服务端.触发事件(_对象名称, "上报工程日志", new Dictionary <string, string> {
                    { "事件参数", HJSON.序列化(__日志) }
                }, __匹配);
            }
        }
コード例 #3
0
 public void 新增告警(M上报告警 告警)
 {
     if (告警.重要性 != E重要性.一般)
     {
         _待处理问题.Add(告警);
         计算健康状态(true);
     }
     _IT服务端.触发事件(_对象名称, "上报告警", new Dictionary <string, string> {
         { "事件参数", HJSON.序列化(告警) }
     });
 }
コード例 #4
0
        public void 建立(M链路 __链路)
        {
            var __地址 = new IPEndPoint(__链路.IP, __链路.端口号);

            if (!_登录缓存.ContainsKey(__地址))
            {
                _登录缓存[__地址] = __链路;
                On已建立连接(__链路);
                _IT服务端.触发事件(_对象名称, "已建立连接", new Dictionary <string, string> {
                    { "事件参数", HJSON.序列化(__链路) }
                });
            }
        }
コード例 #5
0
        M对象 创建对象(IT服务端 __IT服务端, B资源监控 __监控, string __对象名称 = "资源监控", string __分类 = "")
        {
            var __对象 = new M对象(__对象名称, __分类);

            __对象.添加属性("配置", () => HJSON.序列化(__监控.配置), E角色.客户, null);
            __对象.添加属性("总内存", () => string.Format("{0} GB", __监控.总内存 / 1024), E角色.客户, null);

            __对象.添加方法("设置配置", __实参列表 =>
            {
                var __配置 = HJSON.反序列化 <M资源监控配置>(__实参列表["配置"]);
                __监控.配置  = __配置;
                File.WriteAllText(H路径.获取绝对路径("资源监控配置.txt"), HJSON.序列化(__配置), Encoding.UTF8);
                return("");
            }, E角色.客户, null, null);

            __对象.添加方法("查询状态", __实参列表 =>
            {
                return(HJSON.序列化(__监控.查询状态()));
            }, E角色.客户, null, null);

            __对象.添加事件("告警", E角色.客户, new List <M形参> {
                new M形参("描述", "string")
            });
            __监控.阈值告警 += __描述 =>
            {
                H业务日志.记录("进程", __描述);
                __IT服务端.触发事件(__对象名称, "告警", new Dictionary <string, string> {
                    { "描述", __描述 }
                });
            };

            return(__对象);
        }
コード例 #6
0
        M对象 创建对象(IT服务端 __IT服务端, BFTP __FTP, string __对象名称 = "FTP", string __分类 = "")
        {
            var __对象 = new M对象(__对象名称, __分类);

            __对象.添加属性("运行中", () => __FTP.运行中.ToString(), E角色.客户, null);
            __对象.添加属性("端口号", () => __FTP.端口号.ToString(), E角色.客户, null);
            __对象.添加属性("目录", () => __FTP.目录, E角色.客户, null);
            __对象.添加属性("编码", () => "GB2312", E角色.客户, null);
            __对象.添加方法("开启", __实参列表 =>
            {
                var __目录  = __实参列表["目录"];
                var __端口号 = int.Parse(__实参列表["端口号"]);
                __FTP.开启(__目录, __端口号);
                return("");
            }, E角色.客户, new List <M形参>
            {
                new M形参("目录", "string"),
                new M形参("端口号", "int"),
            }, null);
            __对象.添加方法("关闭", __实参列表 =>
            {
                __FTP.关闭();
                return("");
            }, E角色.客户, null, null);
            __对象.添加事件("开关变化", E角色.客户, new List <M形参> {
                new M形参("开", "bool")
            });
            __FTP.状态变化 += __参数 => __IT服务端.触发事件(__对象名称, "开关变化", new Dictionary <string, string> {
                { "开", __参数.ToString() }
            });
            return(__对象);
        }
コード例 #7
0
        protected virtual void On设备事件上报(M点名事件 __事件)
        {
            var handler = 设备事件上报;

            if (handler != null)
            {
                handler(__事件);
            }
            _IT服务端.触发事件(_对象名称, "设备事件上报", new Dictionary <string, string> {
                { "事件", __事件.ToString() }
            });
        }
コード例 #8
0
        M对象 创建对象(IT服务端 __IT服务端, B链路监控 __Ping, string __对象名称 = "链路监控", string __分类 = "")
        {
            var __对象 = new M对象(__对象名称, __分类);

            __对象.添加属性("配置", () => HJSON.序列化(__Ping.配置), E角色.客户, null);

            __对象.添加方法("查询状态", __实参列表 =>
            {
                return(HJSON.序列化(__Ping.查询状态()));
            }, E角色.客户, null, null);

            __对象.添加方法("修改配置", __实参列表 =>
            {
                var __配置 = HJSON.反序列化 <M链路监控配置>(__实参列表["配置"]);
                __Ping.修改配置(__配置);
                File.WriteAllText(H路径.获取绝对路径("链路监控配置.txt"), HJSON.序列化(__Ping.配置), Encoding.UTF8);
                return("");
            }, E角色.客户, new List <M形参>
            {
                new M形参("配置", new M元数据 {
                    结构 = E数据结构.对象, 子成员列表 = new List <M子成员> {
                        new M子成员("超时", new M元数据 {
                            类型 = "int", 描述 = "毫秒", 默认值 = "1000"
                        }),
                        new M子成员("频率", new M元数据 {
                            类型 = "int", 描述 = "毫秒/次", 默认值 = "1000"
                        }),
                        new M子成员("阈值", new M元数据 {
                            类型 = "int", 描述 = "1-10, 通过10次中成功的次数表示当前通断", 默认值 = "7"
                        }),
                        new M子成员("IP列表", new M元数据 {
                            类型 = "string", 描述 = "ip或域名", 结构 = E数据结构.单值数组
                        }),
                    }
                }),
            }, null);

            __对象.添加事件("连接变化", E角色.客户, new List <M形参> {
                new M形参("地址", "string"), new M形参("旧", "bool"), new M形参("新", "bool")
            });
            __Ping.连接变化 += (__地址, __旧, __新) =>
            {
                H业务日志.记录("链路", string.Format("{0} {1}", __地址, __新 == true ? "通" : "断"));
                __IT服务端.触发事件(__对象名称, "连接变化", new Dictionary <string, string> {
                    { "地址", __地址 }, { "旧", __旧.ToString() }, { "新", __新.ToString() }
                });
            };
            return(__对象);
        }
コード例 #9
0
        M对象 创建对象(IT服务端 __IT服务端, B命令行 __命令行, string __对象名称 = "命令行", string __分类 = "")
        {
            Func <IPEndPoint, string, string>          __合并 = (__地址, __标识) => string.Format("{0}:{1}:{2}", __地址.Address, __地址.Port, __标识);
            Func <string, Tuple <IPEndPoint, string> > __解析 = __合成标识 =>
            {
                var __数组 = __合成标识.Split(':');
                var __地址 = new IPEndPoint(IPAddress.Parse(__数组[0]), int.Parse(__数组[1]));
                var __标识 = __数组[2];
                return(new Tuple <IPEndPoint, string>(__地址, __标识));
            };
            var __对象 = new M对象(__对象名称, __分类);

            __对象.添加属性("IsWindows", () => __命令行.IsWindows.ToString(), E角色.客户);
            __对象.添加方法("创建进程", (__实参列表, __地址) =>
            {
                var __进程标识 = __合并(__地址, __实参列表["进程标识"]);
                __命令行.创建进程(__进程标识);
                return("");
            }, E角色.客户, new List <M形参>
            {
                new M形参("进程标识", "string"),
            });

            __对象.添加方法("结束进程", (__实参列表, __地址) =>
            {
                var __进程标识 = __合并(__地址, __实参列表["进程标识"]);
                __命令行.结束进程(__进程标识);
                return("");
            }, E角色.客户, new List <M形参>
            {
                new M形参("进程标识", "string"),
            });

            __对象.添加方法("执行", (__实参列表, __地址) =>
            {
                var __进程标识  = __合并(__地址, __实参列表["进程标识"]);
                var __命令行列表 = HJSON.反序列化 <List <string> >(__实参列表["命令行列表"]);
                __命令行.执行(__进程标识, __命令行列表);
                return("");
            }, E角色.客户, new List <M形参>
            {
                new M形参("进程标识", "string"),
                new M形参("命令行列表", "string", E数据结构.单值数组),
            });

            __对象.添加事件("正常输出", E角色.客户, new List <M形参> {
                new M形参("参数", new M元数据 {
                    类型 = "M输出", 结构 = E数据结构.对象, 子成员列表 = new List <M子成员> {
                        new M子成员("进程标识", "string"),
                        new M子成员("内容", "string")
                    }
                }),
            });

            __对象.添加事件("异常输出", E角色.客户, new List <M形参> {
                new M形参("参数", new M元数据 {
                    类型 = "M输出", 结构 = E数据结构.对象, 子成员列表 = new List <M子成员> {
                        new M子成员("进程标识", "string"),
                        new M子成员("内容", "string")
                    }
                }),
            });

            __对象.添加事件("执行结束", E角色.客户, new List <M形参> {
                new M形参("参数", new M元数据 {
                    类型 = "M输出", 结构 = E数据结构.对象, 子成员列表 = new List <M子成员> {
                        new M子成员("进程标识", "string"),
                        new M子成员("内容", "string")
                    }
                }),
            });
            __命令行.正常输出 += __参数 =>
            {
                var __分解 = __解析(__参数.进程标识);
                var __地址 = __分解.Item1;
                __参数.进程标识 = __分解.Item2;
                __参数.内容   = __参数.内容 == null ? null : __参数.内容.Replace("{", "").Replace("}", "").Replace("[", "").Replace("]", "");
                __IT服务端.触发事件(__对象名称, "正常输出", new Dictionary <string, string> {
                    { "参数", HJSON.序列化(__参数) }
                }, new List <IPEndPoint> {
                    __地址
                });
            };
            __命令行.异常输出 += __参数 =>
            {
                var __分解 = __解析(__参数.进程标识);
                var __地址 = __分解.Item1;
                __参数.进程标识 = __分解.Item2;
                __参数.内容   = __参数.内容 == null ? null : __参数.内容.Replace("{", "").Replace("}", "").Replace("[", "").Replace("]", "");
                __IT服务端.触发事件(__对象名称, "异常输出", new Dictionary <string, string> {
                    { "参数", HJSON.序列化(__参数) }
                }, new List <IPEndPoint> {
                    __地址
                });
            };
            __命令行.执行结束 += __参数 =>
            {
                var __分解 = __解析(__参数.进程标识);
                var __地址 = __分解.Item1;
                __参数.进程标识 = __分解.Item2;
                __参数.内容   = __参数.内容 == null ? null : __参数.内容.Replace("{", "").Replace("}", "").Replace("[", "").Replace("]", "");
                __IT服务端.触发事件(__对象名称, "执行结束", new Dictionary <string, string> {
                    { "参数", HJSON.序列化(__参数) }
                }, new List <IPEndPoint> {
                    __地址
                });
            };
            return(__对象);
        }
コード例 #10
0
        M对象 创建对象(IT服务端 __IT服务端, B进程监控 __监控, string __对象名称 = "进程监控", string __分类 = "")
        {
            var __对象 = new M对象(__对象名称, __分类);

            __对象.添加方法("查询状态", __实参列表 =>
            {
                return(HJSON.序列化(__监控.查询状态()));
            }, E角色.客户, null);

            __对象.添加方法("查询配置", __实参列表 =>
            {
                return(HJSON.序列化(__监控.查询配置()));
            }, E角色.客户, null);

            __对象.添加方法("设置配置", __实参列表 =>
            {
                var __配置 = HJSON.反序列化 <M进程监控配置>(__实参列表["配置"]);
                __监控.设置配置(__配置);
                File.WriteAllText(H路径.获取绝对路径("进程监控配置.txt"), HJSON.序列化(__配置), Encoding.UTF8);
                return("");
            }, E角色.客户, new List <M形参>
            {
                new M形参("配置", new M元数据 {
                    结构 = E数据结构.对象, 子成员列表 = new List <M子成员> {
                        new M形参("频率", ""),
                        new M形参("列表", new M元数据 {
                            结构 = E数据结构.对象数组, 子成员列表 = new List <M子成员> {
                                new M子成员("进程名", "string"),
                                new M子成员("CPU阈值", new M元数据 {
                                    类型 = "int?", 描述 = "可为空,1-100", 默认值 = "90"
                                }),
                                new M子成员("内存阈值", new M元数据 {
                                    类型 = "int?", 描述 = "可为空,单位MB", 默认值 = "2000"
                                }),
                                new M子成员("阈值次数", new M元数据 {
                                    类型 = "int?", 默认值 = "可为空,5"
                                }),
                            }
                        })
                    }
                }),
            }, null);

            __对象.添加事件("告警", E角色.客户, new List <M形参> {
                new M形参("描述", "string")
            });
            __监控.进程开启 += (qid, __进程名, __时间) =>
            {
                var __描述 = string.Format("进程{1}({0})开启, {2}", qid, __进程名, __时间.ToString());
                H业务日志.记录("进程", __描述);
                __IT服务端.触发事件(__对象名称, "告警", new Dictionary <string, string> {
                    { "描述", __描述 }
                });
            };
            __监控.进程关闭 += (qid, __进程名) =>
            {
                var __描述 = string.Format("进程{1}({0})关闭", qid, __进程名);
                H业务日志.记录("进程", __描述);
                __IT服务端.触发事件(__对象名称, "告警", new Dictionary <string, string> {
                    { "描述", __描述 }
                });
            };
            __监控.阈值告警 += __描述 =>
            {
                H业务日志.记录("进程", __描述);
                __IT服务端.触发事件(__对象名称, "告警", new Dictionary <string, string> {
                    { "描述", __描述 }
                });
            };
            return(__对象);
        }