public void ExecuteBefore([Object] DiagnosticsMessage message) { if (message == null || message.Sql.IsNullOrEmpty()) { return; } var parameterJson = string.Empty; if (message.Parameters is DynamicParameters dynamicParameters) { parameterJson = dynamicParameters .ParameterNames? .ToDictionary(k => k, v => dynamicParameters.Get <object>(v)) .ToJson(); } else if (message.Parameters is OracleDynamicParameters oracleDynamicParameters) { parameterJson = oracleDynamicParameters .OracleParameters .ToDictionary(k => k.ParameterName, v => v.Value) .ToJson(); } else { parameterJson = message.Parameters.ToJson(); } var newLine = Environment.NewLine; var context = CreateExitSegmentContext(message.Sql, message.DataSource); context.Span.AddLog(LogEvent.Event($"{DiagnosticStrings.BeforeExecute.Split(' ').Last()}: {DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}")); context.Span.AddLog(LogEvent.Message($"sql: {message.Sql}{newLine}parameters: {parameterJson}{newLine}databaseType: {message.DatabaseType}{newLine}dataSource: {message.DataSource}{newLine}timestamp: {message.Timestamp}")); }
public void SendDiagnosticsEnable(bool enable) { var msg = new DiagnosticsMessage(); msg.EnableDiagnostics = enable; PushMessage(msg); }
public void ExecuteBefore([Object] DiagnosticsMessage message) { if (message != null && !message.Sql.IsNullOrEmpty()) { var parameterJson = string.Empty; if (message.Parameters is DynamicParameters dynamicParameters) { parameterJson = dynamicParameters .ParameterNames? .ToDictionary(k => k, v => dynamicParameters.Get <object>(v)) .ToJson(); } else if (message.Parameters is OracleDynamicParameters oracleDynamicParameters) { parameterJson = oracleDynamicParameters .OracleParameters .ToDictionary(k => k.ParameterName, v => v.Value) .ToJson(); } else { parameterJson = message.Parameters.ToJson(); } var context = CreateExitSegmentContext(message.Sql, message.DataSource); context.Span.AddLog(LogEvent.Event(DiagnosticStrings.BeforeExecute.Split(' ').Last())); context.Span.AddLog(LogEvent.Message($"sql语句:{message.Sql}")); context.Span.AddLog(LogEvent.Message($"sql参数:{parameterJson}")); } }
public static BuildResult ToBuildResult(this DiagnosticsMessage message) { var result = new BuildResult(); AddErrors(result.AddWarning, message.Warnings); AddErrors(result.AddError, message.Errors); return(result); }
/// <summary> /// 执行后诊断 /// </summary> /// <param name="message">诊断消息</param> protected virtual void ExecuteAfter(DiagnosticsMessage message) { if (message?.OperationTimestamp != null && _diagnosticListener.IsEnabled(SqlQueryDiagnosticListenerNames.AfterExecute)) { message.Operation = SqlQueryDiagnosticListenerNames.AfterExecute; message.ElapsedMilliseconds = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - message.OperationTimestamp.Value; _diagnosticListener.Write(SqlQueryDiagnosticListenerNames.AfterExecute, message); } }
protected override void OnOpen() { var inputs = ControllerServer.Instance.GetInputs(); var msg = new DiagnosticsMessage() { // Report, which players currently lost their connection playersWithLostConnection = inputs.Where(input => !input.IsConnected()).Select(input => input.PlayerName).ToList() }; // Send the diagnostic information Send(msg.ToJson()); // Close the connection Close(); }
public async Task SubscribeAsync(string resource, bool monitor) { string monitorUriString = null; string logUriString = null; string[] parts = resource.Split(new[] { "-" }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 1) { //virtual rtu monitorUriString = UriGenerator.GetVirtualRtuDiagnosticsPiSystem(hostname, parts[0]); logUriString = UriGenerator.GetVirtualRtuTelemetryPiSystem(hostname, parts[0]); } else if (parts.Length == 2) { //module monitorUriString = UriGenerator.GetDeviceDiagnosticsPiSystem(hostname, parts[0], parts[1]); logUriString = UriGenerator.GetDeviceTelemetryPiSystem(hostname, parts[0], parts[1]); } DiagnosticsMessage mevent = new DiagnosticsMessage { Type = monitor ? DiagnosticsEventType.Native : DiagnosticsEventType.None }; string jsonString = JsonConvert.SerializeObject(mevent); await client.PublishAsync(QualityOfServiceLevelType.AtMostOnce, monitorUriString, "application/json", Encoding.UTF8.GetBytes(jsonString)); if (monitor) { if (!subscriptions.Contains(logUriString)) { subscriptions.Add(logUriString); await client.SubscribeAsync(logUriString, QualityOfServiceLevelType.AtMostOnce, ReceiveLog); } } else { if (subscriptions.Contains(logUriString)) { subscriptions.Remove(logUriString); await client.UnsubscribeAsync(logUriString); } } }
/// <summary> /// 执行前诊断 /// </summary> /// <param name="sql">Sql语句</param> /// <param name="parameter">Sql参数</param> /// <param name="dataSource">数据源</param> protected virtual DiagnosticsMessage ExecuteBefore(string sql, object parameter, string dataSource = null) { if (!_diagnosticListener.IsEnabled(SqlQueryDiagnosticListenerNames.BeforeExecute)) { return(null); } var message = new DiagnosticsMessage { Sql = sql, Parameters = parameter, DataSource = dataSource, OperationTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), Operation = SqlQueryDiagnosticListenerNames.BeforeExecute, DatabaseType = SqlOptions.DatabaseType, }; _diagnosticListener.Write(SqlQueryDiagnosticListenerNames.BeforeExecute, message); return(message); }
/// <summary> /// 查询 /// </summary> /// <typeparam name="TResult">实体类型</typeparam> /// <param name="func">查询操作</param> /// <param name="connection">数据库连接</param> public TResult Query <TResult>(Func <IDbConnection, string, IReadOnlyDictionary <string, object>, TResult> func, IDbConnection connection = null) { DiagnosticsMessage message = null; try { var sql = GetSql(); message = ExecuteBefore(sql, Params); WriteTraceLog(sql, Params, GetDebugSql()); var result = func(GetConnection(connection), sql, Params); ClearAfterExecution(); ExecuteAfter(message); return(result); } catch (Exception e) { ExecuteError(message, e); throw; } }
/// <summary> /// 获取行数 /// </summary> /// <param name="connection">数据库连接</param> protected async Task <int> GetCountAsync(IDbConnection connection) { DiagnosticsMessage message = null; try { var builder = GetCountBuilder(); var sql = builder.ToSql(); message = ExecuteBefore(sql, Params); WriteTraceLog(sql, builder.GetParams(), builder.ToDebugSql()); var result = await GetConnection(connection).ExecuteScalarAsync(sql, builder.GetParams()); ExecuteAfter(message); return(Conv.ToInt(result)); } catch (Exception e) { ExecuteError(message, e); throw; } }
public async Task SubscribeAppInsightsAsync(string resource, bool monitor) { string monitorUriString = null; string[] parts = resource.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 1) { //virtual rtu monitorUriString = UriGenerator.GetVirtualRtuDiagnosticsPiSystem(hostname, parts[0]); } else if (parts.Length == 3) { //module monitorUriString = UriGenerator.GetDeviceDiagnosticsPiSystem(hostname, parts[0], parts[1]); } DiagnosticsMessage mevent = new DiagnosticsMessage() { Type = monitor ? DiagnosticsEventType.AppInsights : DiagnosticsEventType.None }; string jsonString = JsonConvert.SerializeObject(mevent); await client.PublishAsync(QualityOfServiceLevelType.AtMostOnce, monitorUriString, "application/json", Encoding.UTF8.GetBytes(jsonString)); }
public static void DiagnosticSourceTest() { #region DiagnosticSource var diagnosticListener = new DiagnosticListener(DiagnosticStrings.DiagnosticListenerName); ////订阅方法一 //DiagnosticListener.AllListeners.Subscribe(new MyObserver<DiagnosticListener>(listener => //{ // //判断发布者的名字 // if (listener.Name == DiagnosticStrings.DiagnosticListenerName) // { // //获取订阅信息 // listener.Subscribe(new MyObserver<KeyValuePair<string, object>>(listenerData => // { // Console.WriteLine($"监听名称:{listenerData.Key}"); // dynamic data = listenerData.Value; // Console.WriteLine(data.Sql); // })); // } //})); ////订阅方法二 DiagnosticListener.AllListeners.Subscribe(new MyObserver <DiagnosticListener>(listener => { if (listener.Name == DiagnosticStrings.DiagnosticListenerName) { //适配订阅 listener.SubscribeWithAdapter(new MyDiagnosticListener()); } })); //订阅方法三 //diagnosticListener.SubscribeWithAdapter(new MyDiagnosticListener()); diagnosticListener.SubscribeWithAdapter(new SqlBuilderDiagnosticListener(null)); //发送日志诊断消息 if (diagnosticListener.IsEnabled(DiagnosticStrings.BeforeExecute) && diagnosticListener.IsEnabled(DiagnosticStrings.AfterExecute) && diagnosticListener.IsEnabled(DiagnosticStrings.ErrorExecute)) { var message = new DiagnosticsMessage { Sql = "select * from table", Parameters = new Dictionary <string, object> { ["key"] = "123" }, Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }; diagnosticListener.Write( DiagnosticStrings.BeforeExecute, message); message.ElapsedMilliseconds = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - message.Timestamp; diagnosticListener.Write( DiagnosticStrings.AfterExecute, message); message.ElapsedMilliseconds = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - message.Timestamp; message.Exception = new Exception("测试异常"); diagnosticListener.Write( DiagnosticStrings.ErrorExecute, message); } #endregion }
private bool IsDifferent(DiagnosticsMessage local, DiagnosticsMessage remote) { return(true); }
public DiagnosticsEventArgs(int contextId, DiagnosticsMessage message) : base(contextId) { _message = message; }