255 lines
10 KiB
C#
255 lines
10 KiB
C#
|
|
using Common;
|
|||
|
|
using Commonlib;
|
|||
|
|
using LogCap.Common;
|
|||
|
|
using LogCap.Entity;
|
|||
|
|
using Microsoft.Extensions.Caching.Memory;
|
|||
|
|
using Microsoft.VisualBasic;
|
|||
|
|
using MQTTnet;
|
|||
|
|
using MQTTnet.Packets;
|
|||
|
|
using MQTTnet.Protocol;
|
|||
|
|
using NetMQ;
|
|||
|
|
using NetMQ.Sockets;
|
|||
|
|
using Newtonsoft.Json;
|
|||
|
|
using Newtonsoft.Json.Linq;
|
|||
|
|
using RestSharp;
|
|||
|
|
using RestSharp.Authenticators.OAuth2;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
using System.Timers;
|
|||
|
|
|
|||
|
|
namespace LogCap
|
|||
|
|
{
|
|||
|
|
public class Program
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
public static MemoryCache Cache = new MemoryCache(new MemoryCacheOptions { });
|
|||
|
|
public static IMqttClient mqttClient { get; set; }
|
|||
|
|
|
|||
|
|
public static DateTime CurrentTime { get; set; }
|
|||
|
|
|
|||
|
|
public static int CurrentWangKaBianHao = 0;
|
|||
|
|
public static void Main(string[] args)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
var NQQ = DateTime.Now.ToString("mmss");
|
|||
|
|
//var server = new ResponseSocket("@tcp://127.0.0.1:5556");
|
|||
|
|
//while (true)
|
|||
|
|
//{
|
|||
|
|
// string frame = server.ReceiveFrameString();
|
|||
|
|
// Console.WriteLine("Server received frame={0}", frame);
|
|||
|
|
//}
|
|||
|
|
//Console.ReadLine();
|
|||
|
|
//string SSS = Guid.NewGuid().ToString("N");
|
|||
|
|
//CurrentTime = DateTime.Now;
|
|||
|
|
|
|||
|
|
// var authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(
|
|||
|
|
//"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2NGZjYjhjMS1jZDZjLTRkMTktOTc3My05YzkxYmZhNjQ2YWQiLCJpYXQiOjE3NDEyNDczNDAsImV4cCI6MTc0MTI1ODE0MCwic2NoZW1hIjoibnhnXzcwNzA1OTEzX2VhcXoiLCJ1c2VyIjoiYWYwNzg3YTQtMmM2NC00NWRiLWEzMjktNzg0ZGYwZWRjOGZjIiwiZGVmYXVsdF9wcm9wZXJ0eSI6IjA3MTY3M2IzLWQ4OTMtNDQwYi1iM2YwLTY0YTBkOTY0ZWIyOSIsInRvX3JlZnJlc2giOnRydWUsInR5cGUiOiJhY2Nlc3MiLCJpbml0X2Vwb2NoIjoxNzQxMjQ3MzQwLCJtZWRpdW1fY29kZSI6IldFQiJ9.4k2GE08J3MZQIgRKOx5dYmeL1vSnqDSC11MLpkDNjqQ", "token");
|
|||
|
|
// var options = new RestClientOptions("https://api.fcs1cloud.com")
|
|||
|
|
// {
|
|||
|
|
// //Authenticator = authenticator
|
|||
|
|
|
|||
|
|
// };
|
|||
|
|
// var client = new RestClient(options);
|
|||
|
|
|
|||
|
|
// //string str = Newtonsoft.Json.JsonConvert.SerializeObject(mm);
|
|||
|
|
// //Console.WriteLine("发送MQTT的数据为:" + str);
|
|||
|
|
// var request1 = new RestRequest("/api-secure/job/request", Method.Post);
|
|||
|
|
// request1.AddHeader("token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2NGZjYjhjMS1jZDZjLTRkMTktOTc3My05YzkxYmZhNjQ2YWQiLCJpYXQiOjE3NDEyNDczNDAsImV4cCI6MTc0MTI1ODE0MCwic2NoZW1hIjoibnhnXzcwNzA1OTEzX2VhcXoiLCJ1c2VyIjoiYWYwNzg3YTQtMmM2NC00NWRiLWEzMjktNzg0ZGYwZWRjOGZjIiwiZGVmYXVsdF9wcm9wZXJ0eSI6IjA3MTY3M2IzLWQ4OTMtNDQwYi1iM2YwLTY0YTBkOTY0ZWIyOSIsInRvX3JlZnJlc2giOnRydWUsInR5cGUiOiJhY2Nlc3MiLCJpbml0X2Vwb2NoIjoxNzQxMjQ3MzQwLCJtZWRpdW1fY29kZSI6IldFQiJ9.4k2GE08J3MZQIgRKOx5dYmeL1vSnqDSC11MLpkDNjqQ");
|
|||
|
|
|
|||
|
|
// //注意方法是POST
|
|||
|
|
// //两个参数名字必须是 topic 和payload ,区分大小写的
|
|||
|
|
// //Console.WriteLine("Topic: " + debug_log_report_mqtt_topic);
|
|||
|
|
|
|||
|
|
|
|||
|
|
var list = CSRedisCacheHelper.Get<List<Monitor_Host>>(CacheKey.Key);
|
|||
|
|
Cache.Set<List<Monitor_Host>>(CacheKey.Key, list);
|
|||
|
|
|
|||
|
|
//端点监控
|
|||
|
|
var QQQ = CSRedisCacheHelper.Get<List<MonitorEndPoint>>(CacheKey.MonitorEndPointList);
|
|||
|
|
Cache.Set<List<MonitorEndPoint>>(CacheKey.MonitorEndPointList, QQQ);
|
|||
|
|
|
|||
|
|
_ = Start_MqttClient();
|
|||
|
|
System.Timers.Timer timer = new System.Timers.Timer();
|
|||
|
|
|
|||
|
|
timer.Elapsed += Timer_Elapsed;
|
|||
|
|
timer.Interval = 10000;
|
|||
|
|
timer.Enabled = true;
|
|||
|
|
timer.Start();
|
|||
|
|
|
|||
|
|
System.Timers.Timer timer1 = new System.Timers.Timer();
|
|||
|
|
timer1.Elapsed += Timer1_Elapsed;
|
|||
|
|
|
|||
|
|
timer1.Interval = 60000;
|
|||
|
|
timer1.Enabled = true;
|
|||
|
|
timer1.Start();
|
|||
|
|
|
|||
|
|
PubRepository.GetDeviceList();
|
|||
|
|
|
|||
|
|
Console.WriteLine("选择你要监控的网卡");
|
|||
|
|
//string whitchone = Console.ReadLine();
|
|||
|
|
|
|||
|
|
string whitchone = "3";
|
|||
|
|
int.TryParse(whitchone, out CurrentWangKaBianHao);
|
|||
|
|
|
|||
|
|
|
|||
|
|
PubRepository.StartMonitor(CurrentWangKaBianHao);
|
|||
|
|
Console.WriteLine("正在监控中");
|
|||
|
|
Console.WriteLine("……………………………………………………………………………………………………………………………………………………………………………………");
|
|||
|
|
Console.WriteLine("按回车键就结束");
|
|||
|
|
string? nnn = Console.ReadLine();
|
|||
|
|
PubRepository.StopMonitor();
|
|||
|
|
timer.Dispose();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static async void Timer1_Elapsed(object? sender, ElapsedEventArgs e)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
Console.WriteLine("现在的数量是:"+LogExecute.TotalCountGlobal);
|
|||
|
|
long lla= Interlocked.Read(ref LogExecute.TotalCountGlobal);
|
|||
|
|
CSRedisCacheHelper.Publish("wireshark-cap-udp-totalcount",lla.ToString());
|
|||
|
|
Interlocked.Exchange(ref LogExecute.TotalCountGlobal, 0);
|
|||
|
|
}
|
|||
|
|
catch (Exception)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static async Task MqttClient_DisconnectedAsync(MqttClientDisconnectedEventArgs arg)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine("断线重连了");
|
|||
|
|
await Task.Delay(3000);
|
|||
|
|
await Start_MqttClient();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static Task MqttClient_ApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs arg)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
var str = arg.ApplicationMessage.Payload;
|
|||
|
|
|
|||
|
|
string nnn = Encoding.UTF8.GetString(str);
|
|||
|
|
Monitor_Host? vvv = JsonConvert.DeserializeObject<Monitor_Host>(nnn);
|
|||
|
|
|
|||
|
|
if (vvv != null)
|
|||
|
|
{
|
|||
|
|
string Key = string.Format("{0}_{1}", CacheKey.RoomIP_Port_Prefix, vvv.Key_HostNumber);
|
|||
|
|
|
|||
|
|
var takeMM = Program.Cache.Get<MonitorRedis>(Key);
|
|||
|
|
if (takeMM != null)
|
|||
|
|
{
|
|||
|
|
string IP = takeMM.WWW_IP;
|
|||
|
|
int Port = takeMM.WWW_Port;
|
|||
|
|
string KeyHeartBeat = string.Format("{0}_{1}_{2}", CacheKey.RoomIP_Port_Prefix, IP, Port);
|
|||
|
|
Program.Cache.Remove(KeyHeartBeat);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine("MqttClient_ApplicationMessageReceivedAsync: " + ex.Message);
|
|||
|
|
}
|
|||
|
|
return Task.CompletedTask;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static async void Timer_Elapsed(object? sender, ElapsedEventArgs e)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
Console.WriteLine("定时任务");
|
|||
|
|
var list = CSRedisCacheHelper.Get<List<Monitor_Host>>(CacheKey.Key);
|
|||
|
|
Cache.Set<List<Monitor_Host>>(CacheKey.Key, list);
|
|||
|
|
if (list != null && list.Count != 0)
|
|||
|
|
{
|
|||
|
|
TimeSpan span = DateTime.Now - Program.CurrentTime;
|
|||
|
|
if (span.TotalSeconds >= 35)
|
|||
|
|
{
|
|||
|
|
PubRepository.StopMonitor();
|
|||
|
|
PubRepository.StartMonitor(CurrentWangKaBianHao);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//端点监控
|
|||
|
|
var QQQ = CSRedisCacheHelper.Get<List<MonitorEndPoint>>(CacheKey.MonitorEndPointList);
|
|||
|
|
Cache.Set<List<MonitorEndPoint>>(CacheKey.MonitorEndPointList, QQQ);
|
|||
|
|
|
|||
|
|
var hhh = await mqttClient.PublishStringAsync("/blw/heart/logcap", "heartbeat");
|
|||
|
|
if (hhh.IsSuccess == false)
|
|||
|
|
{
|
|||
|
|
await Start_MqttClient();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine("timer_elapsed: " + ex.Message);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
async public static Task Start_MqttClient()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
var mqttFactory = new MqttClientFactory();
|
|||
|
|
|
|||
|
|
string? ip = ReadConfig.Instance.MQTT_ServerIP;
|
|||
|
|
int? port = ReadConfig.Instance.MQTT_ServerPort;
|
|||
|
|
string? username = ReadConfig.Instance.MQTT_User;
|
|||
|
|
string? pwd = ReadConfig.Instance.MQTT_PassWord;
|
|||
|
|
|
|||
|
|
//long lid = Tools.ToUnixTimestampBySeconds(DateTime.Now);
|
|||
|
|
|
|||
|
|
string lid = Guid.NewGuid().ToString("N");
|
|||
|
|
|
|||
|
|
string ID = $"logmonitor_{lid}";
|
|||
|
|
mqttClient = mqttFactory.CreateMqttClient();
|
|||
|
|
var mqttClientOptions = new MqttClientOptionsBuilder()
|
|||
|
|
.WithClientId(ID)
|
|||
|
|
.WithTcpServer(ip, port)
|
|||
|
|
.WithCredentials(username, pwd)
|
|||
|
|
.WithProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V500)
|
|||
|
|
.Build();
|
|||
|
|
|
|||
|
|
mqttClient.ApplicationMessageReceivedAsync += MqttClient_ApplicationMessageReceivedAsync;
|
|||
|
|
mqttClient.DisconnectedAsync += MqttClient_DisconnectedAsync;
|
|||
|
|
await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None);
|
|||
|
|
|
|||
|
|
//var mqttSubscribeOptions = mqttFactory.CreateSubscribeOptionsBuilder()
|
|||
|
|
// .WithTopicFilter("blw/logmonitor/delete/report")
|
|||
|
|
// .Build();
|
|||
|
|
|
|||
|
|
//var nnn = new MqttTopicFilterBuilder().WithTopic("blw/logmonitor/delete/report");
|
|||
|
|
|
|||
|
|
var subscribeOptions = new MqttClientSubscribeOptions();
|
|||
|
|
var topicFilter = new MqttTopicFilter
|
|||
|
|
{
|
|||
|
|
Topic = "blw/logmonitor/delete/report"
|
|||
|
|
};
|
|||
|
|
subscribeOptions.TopicFilters.Add(topicFilter);
|
|||
|
|
await mqttClient.SubscribeAsync(subscribeOptions, CancellationToken.None);
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine("Start_MqttClient: " + ex.Message);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public class GGH
|
|||
|
|
{
|
|||
|
|
public List<string> location_uuid { get; set; }
|
|||
|
|
public List<GGJ> service_items { get; set; }
|
|||
|
|
public string remark { get; set; }
|
|||
|
|
public string assigned_to { get; set; }
|
|||
|
|
public int user_type { get; set; }
|
|||
|
|
}
|
|||
|
|
public class GGJ
|
|||
|
|
{
|
|||
|
|
public string item_uuid { get; set; }
|
|||
|
|
public int quantity { get; set; }
|
|||
|
|
}
|
|||
|
|
}
|