예제 #1
0
 public void WriteWithHeader_theory(string value, string error, string expected)
 {
     using (var stream = new MemoryStream())
     {
         ZabbixProtocol.WriteWithHeader(stream, value, error);
         var actualBytes   = stream.ToArray();
         var expectedBytes = Encoding.ASCII.GetBytes(expected);
         Check.That(actualBytes).ContainsExactly(expectedBytes);
     }
 }
예제 #2
0
        private byte[] HandleStationDiscovery()
        {
            var jDevice = new JObject();
            var datas   = new JArray();

            for (int i = 0; i < 3; i++)
            {
                var data = new JObject();
                data["{#NAME}"] = "station" + i;
                datas.Add(data);
            }
            jDevice["data"] = datas;

            return(ZabbixProtocol.WriteWithHeader(jDevice));
        }
예제 #3
0
        private void ReadKeyAndWriteAnswer([NotNull] NetworkStream stream)
        {
            var streamReader = new StreamReader(stream);
            var key          = streamReader.ReadLine();

            if (key != null)
            {
                log.Trace("Received: {0}", key);

                var valueString = GetItemStringValue(key);

                log.Trace("Answering: {0}", valueString);

                ZabbixProtocol.WriteWithHeader(stream, valueString, null);
            }
        }
예제 #4
0
        private byte[] HandleItemValue(string itemKey)
        {
            switch (itemKey)
            {
            case "Name":
            {
                return(ZabbixProtocol.WriteWithHeader("Tang Ming"));
            }

            case "Percent":
            {
                return(ZabbixProtocol.WriteWithHeader("70"));
            }

            case "CPU":
            {
                var span = (DateTime.Now - oldValue).TotalSeconds;
                oldValue = DateTime.Now;
                Console.WriteLine(span);
                var value = random.Next(30, 90) + "";
                return(ZabbixProtocol.WriteWithHeader(value));
            }

            case "Detail":
            {
                return(ZabbixProtocol.WriteWithHeader("Hello World!"));
            }

            default:
            {
                if (itemKey.Contains("station"))
                {
                    return(GetStationValue(itemKey));
                }
                else if (itemKey.Contains("device"))
                {
                    return(GetDeviceValue(itemKey));
                }
                else
                {
                    return(ZabbixProtocol.WriteWithHeader($"{ZabbixConstants.NotSupported}\0Cannot find the item key"));
                }
            }
            }
        }
예제 #5
0
        private void OnClientConnected(object sender, EventArgs e)
        {
            this.Dispatcher.BeginInvoke(new Action(() =>
            {
                if (client.IsConnected)
                {
                    if (JData == null)
                    {
                        JObject obj = new JObject();
                        obj["request"] = "active checks";
                        obj["host"] = "Dell Laptop";
                        var sendMsg = ZabbixProtocol.WriteWithHeader(obj);

                        client.Send(sendMsg);
                    }
                    else
                    {
                        JObject obj = new JObject();
                        obj["request"] = "agent data";
                        JArray jArray = new JArray();

                        var data = JData.SelectToken("data") as JArray;
                        foreach (var da in data)
                        {
                            JObject dataObj = new JObject();
                            dataObj["key"] = da["key"] + "";
                            dataObj["host"] = "Dell Laptop";
                            dataObj["value"] = "98";
                            //dataObj["clock"] = DateTime.Now.Ticks;
                            dataObj["ns"] = 76808644;
                            jArray.Add(dataObj);
                        }
                        obj["data"] = jArray;
                        var sendMsg = ZabbixProtocol.WriteWithHeader(obj);

                        client.Send(sendMsg);
                    }
                }
            }));
        }
예제 #6
0
        //接收客户端消息
        private void App_NewRequestReceived(ZabbixSession session, ZabbixRequestInfo requestInfo)
        {
            if (appServer != null && appServer.State == ServerState.Running && appServer.SessionCount > 0)
            {
                Console.WriteLine($"收到:{requestInfo.Key}, Time:{DateTime.Now:HH:mm:ss}");

                switch (requestInfo.Key)
                {
                case "agent.ping":
                {
                    var data = ZabbixProtocol.WriteWithHeader("1");
                    session.Send(data, 0, data.Length);
                }
                break;

                case "device.discovery":
                {
                    var data = HandleDeviceDiscovery();
                    session.Send(data, 0, data.Length);
                }
                break;

                case "station.discovery":
                {
                    var data = HandleStationDiscovery();
                    session.Send(data, 0, data.Length);
                }
                break;

                default:
                {
                    var data = HandleItemValue(requestInfo.Key);
                    session.Send(data, 0, data.Length);
                }
                break;
                }
            }
        }
예제 #7
0
        public byte[] GetStationValue(string itemKey)
        {
            int    index1 = itemKey.IndexOf('[');
            int    index2 = itemKey.IndexOf(']');
            string dicKey = itemKey.Substring(index1 + 1, index2 - index1 - 1);

            if (itemKey.Contains(".ip"))
            {
                return(ZabbixProtocol.WriteWithHeader($"192.168.100.1"));
            }
            else if (itemKey.Contains(".name"))
            {
                return(ZabbixProtocol.WriteWithHeader($"stationName"));
            }
            else if (itemKey.Contains(".state"))
            {
                return(ZabbixProtocol.WriteWithHeader($"1"));
            }
            else if (itemKey.Contains(".errormessage"))
            {
                return(ZabbixProtocol.WriteWithHeader($"None"));
            }
            return(ZabbixProtocol.WriteWithHeader($"{ZabbixConstants.NotSupported}\0Cannot find the item key"));
        }