293 lines
12 KiB
C#
293 lines
12 KiB
C#
using Aliyun.Api.LogService;
|
|
using Aliyun.Api.LogService.Domain.Log;
|
|
using Aliyun.Api.LogService.Domain.LogStore.Index;
|
|
using Aliyun.Api.LogService.Infrastructure.Protocol;
|
|
using Models;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace COMMON
|
|
{
|
|
/// <summary>
|
|
/// 阿里云服务
|
|
/// </summary>
|
|
public class ASLS
|
|
{
|
|
//此处以深圳为例,其它地域请根据实际情况填写。
|
|
private static string endpoint = "cn-shenzhen.log.aliyuncs.com";
|
|
|
|
// private static string accessKeyId = "LTAI4GKcpyML2ihVUe6bk1qj";
|
|
private static string accessKeyId = "LTAI5tFDX4g74gJvEsdidRtD";
|
|
|
|
// private static string accessKeySecret = "IbeljP1LAuFYc0pGPvrX4AMAbrNhkj";
|
|
private static string accessKeySecret = "mN7DDagPbjcKc5qFgHEIGvmasUsRF7";
|
|
|
|
//Project名称。
|
|
private static string project = "rucs-project";
|
|
|
|
//Logstore名称。
|
|
private static string logstore = "rucs-udp-log-db";
|
|
|
|
|
|
|
|
private static string logstore_ = "rucs-eventlogging-db";
|
|
|
|
|
|
/// <summary>
|
|
/// 主题
|
|
/// </summary>
|
|
private static string topic = "rucs-udp";
|
|
|
|
/// <summary>
|
|
/// 创建日志服务Client。
|
|
/// </summary>
|
|
public ILogServiceClient client => BuildSimpleClient();
|
|
|
|
/// <summary>
|
|
/// 初始化 阿里云服务
|
|
/// </summary>
|
|
public async void Init()
|
|
{
|
|
|
|
var data = await client.GetProjectAsync();
|
|
|
|
if (data.IsSuccess == true)
|
|
{
|
|
LogHelp.Warning(project + "项目已经存在~");
|
|
}
|
|
if (/*data == null ||*/ !data.IsSuccess)
|
|
{
|
|
//创建Project。
|
|
var proRes = await client.CreateProjectAsync(project, "代码测试~");
|
|
check(proRes);
|
|
LogHelp.Warning("Create project success,await 30 S ~");
|
|
Thread.Sleep(30 * 1000);
|
|
|
|
}
|
|
|
|
var data1 = await client.ListLogStoreAsync(logstore, 0);
|
|
check(data1);
|
|
if (data1.Result == null || data1.Result.Logstores.IndexOf(logstore) < 0)
|
|
{
|
|
//创建Logstore。
|
|
var storeRes = await client.CreateLogStoreAsync(logstore, 90, 9);
|
|
check(storeRes);
|
|
LogHelp.Warning("Create logstore success,await 30 s~");
|
|
Thread.Sleep(30 * 1000);
|
|
//为Logstore创建索引。
|
|
var Index = new Dictionary<String, IndexKeyInfo>() { };
|
|
|
|
Index.Add("id", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("datetime", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("mac", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("msg_id", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("result", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("receipttime", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("packagetime", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("revdelaydatetime", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("udp_cmd", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("prot_timeout", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("remark", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("tcp_id", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("data_valid", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("processing_timespent", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("content_decrypt", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("content_encrypt", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("length", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("retry_count", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("sed_timeout", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("rcv_timeout", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("destination_port", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("destination", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("source_port", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("direction", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("source_ip", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("udp_id", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
|
|
var indRes = await client.CreateIndexAsync(logstore, Index);
|
|
check(indRes);
|
|
LogHelp.Warning("Create Index success,await 30 s~");
|
|
Thread.Sleep(30 * 1000);
|
|
|
|
}
|
|
else
|
|
LogHelp.Warning("logstore已经存在~");
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 写入阿里云服务
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task<bool>write(string _logstore,params LogInfo[] log)
|
|
{
|
|
try
|
|
{
|
|
LogGroupInfo data = new LogGroupInfo();
|
|
data.Logs = log;
|
|
var indRes = await client.PostLogStoreLogsAsync(
|
|
new PostLogsRequest(_logstore, data)
|
|
{
|
|
ProjectName = project
|
|
}
|
|
);
|
|
check(indRes);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
/// <summary>
|
|
/// 初始化 阿里云服务
|
|
/// </summary>
|
|
public async void Init_()
|
|
{
|
|
try
|
|
{
|
|
var data = await client.GetProjectAsync();
|
|
if (data.IsSuccess == true)
|
|
{
|
|
LogHelp.Warning(project + "项目已经存在~");
|
|
Debug.Write(project + "项目已经存在~");
|
|
}
|
|
if (/*data == null ||*/ !data.IsSuccess)
|
|
{
|
|
//创建Project。
|
|
var proRes = await client.CreateProjectAsync(project, "代码测试~");
|
|
check(proRes);
|
|
LogHelp.Warning("Create project success,await 30 S ~");
|
|
Debug.Write("Create project success,await 30 S ~");
|
|
Thread.Sleep(30 * 1000);
|
|
}
|
|
var data1 = await client.ListLogStoreAsync(logstore_, 0);
|
|
check(data1);
|
|
if (data1.Result == null || data1.Result.Logstores.IndexOf(logstore_) < 0)
|
|
{
|
|
//创建Logstore。
|
|
var storeRes = await client.CreateLogStoreAsync(logstore_, 90, 9);
|
|
check(storeRes);
|
|
LogHelp.Warning("Create logstore success,await 30 s~");
|
|
Debug.Write("Create logstore success,await 30 S ~");
|
|
Thread.Sleep(30 * 1000);
|
|
//为Logstore创建索引。
|
|
var Index = new Dictionary<String, IndexKeyInfo>() { };
|
|
Index.Add("event_type", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("eventlogging_id", new IndexLongKeyInfo() { DocValue = true });
|
|
Index.Add("registrar", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("input_datetime", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("remark", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("output_datatime", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("steprecording", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("info", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("role", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("mac", new IndexTextKeyInfo(new char[' ']) { DocValue = true });
|
|
Index.Add("hotel_id", new IndexDoubleKeyInfo() { DocValue = true });
|
|
Index.Add("hotel_old_id", new IndexDoubleKeyInfo() { DocValue = true });
|
|
Index.Add("room_old_id", new IndexDoubleKeyInfo() { DocValue = true });
|
|
Index.Add("room_id", new IndexDoubleKeyInfo() { DocValue = true });
|
|
var indRes = await client.CreateIndexAsync(logstore_, Index);
|
|
check(indRes);
|
|
LogHelp.Warning("Create Index success,await 30 s~");
|
|
Debug.Write("Create Index success,await 30 S ~");
|
|
Thread.Sleep(30 * 1000);
|
|
|
|
}
|
|
else
|
|
{
|
|
LogHelp.Warning("logstore已经存在~");
|
|
Debug.Write("logstore已经存在~");
|
|
}
|
|
}
|
|
catch (Exception EX)
|
|
{
|
|
Debug.Write(EX.ToString());
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 查询 阿里云数据 udp
|
|
/// </summary>
|
|
/// <param name="sql"></param>
|
|
/// <param name="start"></param>
|
|
/// <param name="end"></param>
|
|
/// <param name="line"></param>
|
|
/// <param name="offset"></param>
|
|
/// <param name="losg"></param>
|
|
/// <returns></returns>
|
|
public async Task<IList<IDictionary<string, string>>> GetLogs_(int losg, string sql, DateTime start = default , DateTime end = default, int line = 100, int offset = 0)
|
|
{
|
|
if(start == default)
|
|
{
|
|
start = ConfigEntity.Instance.STARTTIME;
|
|
}
|
|
if (end == default)
|
|
{
|
|
end = DateTime.Now;
|
|
}
|
|
var logstr = losg == 0 ? logstore : (losg==1? logstore_: "rucs-log-db");
|
|
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
|
|
|
|
stopwatch.Start();
|
|
if (end - start >= TimeSpan.FromDays(ConfigEntity.Instance.ASLS))
|
|
start = end.AddDays(-ConfigEntity.Instance.ASLS);
|
|
|
|
sql = sql.TrimEnd();
|
|
|
|
IList<IDictionary<string, string>> RES = new List<IDictionary<string, string>>();
|
|
|
|
DateTimeOffset start_ = start;//.AddHours (-8);
|
|
|
|
DateTimeOffset end_ = end;//.AddHours(-8);
|
|
try
|
|
{
|
|
var logsRes = await client.GetLogsAsync(logstr, start_, end_, topic, sql, line, offset, true);
|
|
|
|
check(logsRes);
|
|
|
|
return logsRes.Result.Logs;
|
|
}
|
|
catch (Exception EX)
|
|
{
|
|
LogHelp.Error(EX.ToString());
|
|
RES = new List<IDictionary<string, string>>();
|
|
}
|
|
finally
|
|
{
|
|
stopwatch.Stop();
|
|
LogHelp.Error($"{sql}---- 用时:" + (stopwatch.ElapsedMilliseconds / 1000.00) + "。</p>");
|
|
}
|
|
return RES;
|
|
}
|
|
|
|
/// <summary>
|
|
/// sls
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public ILogServiceClient BuildSimpleClient()
|
|
=> LogServiceClientBuilders.HttpBuilder
|
|
.Endpoint(endpoint, project)
|
|
.Credential(accessKeyId, accessKeySecret)
|
|
.Build();
|
|
/// <summary>
|
|
/// 检查结果
|
|
/// </summary>
|
|
/// <param name="res"></param>
|
|
/// <exception cref="ApplicationException"></exception>
|
|
public void check(IResponse res)
|
|
{
|
|
if (!res.IsSuccess)
|
|
{
|
|
throw new ApplicationException(res.Error != null ? res.Error.ErrorMessage : "请求错误~" + Newtonsoft.Json.JsonConvert.SerializeObject(res));
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|