public async Task ReportMetrics(IClientPerformanceMetrics metricsData) { using (var conn = new SqlConnection(connectionString)) { conn.Open(); using (var tx = conn.BeginTransaction()) { var command1 = new SqlCommand(CLIENT_READ_SINGLE_ROW); command1.Parameters.Add(new SqlParameter { ParameterName = "@id", DbType = DbType.String, Value = deploymentId }); command1.Parameters.Add(new SqlParameter { ParameterName = "@clientid", DbType = DbType.String, Value = clientId }); command1.Connection = conn; command1.Transaction = tx; var result = (Int32)await command1.ExecuteScalarAsync(); var command2 = new SqlCommand((result > 0) ? CLIENT_UPDATE_ROW : CLIENT_INSERT_ROW); ConvertToClientMetricsRow(metricsData, command2); command2.Connection = conn; command2.Transaction = tx; await command2.ExecuteNonQueryAsync(); tx.Commit(); } } }
/// <summary> /// Writes metrics to the database /// </summary> /// <param name="metricsData">Metrics data</param> /// <returns>Task for database operation</returns> public async Task ReportMetrics(IClientPerformanceMetrics metricsData) { if (this.logger != null && this.logger.IsVerbose3) { this.logger.Verbose3( "MongoStatisticsPublisher.ReportMetrics (client) called with data: {0}.", metricsData); } try { await this.repository.UpsertReportClientMetricsAsync( new OrleansClientMetricsTable { DeploymentId = this.deploymentId, ClientId = this.clientId, Address = this.clientAddress.MapToIPv4().ToString(), HostName = this.hostName }, metricsData); } catch (Exception ex) { if (this.logger != null && this.logger.IsVerbose) { this.logger.Verbose("MongoStatisticsPublisher.ReportMetrics (client) failed: {0}", ex); } throw; } }
public Task ReportMetrics(IClientPerformanceMetrics metricsData) { var clientMetricsTableEntry = PopulateClientMetricsDataTableEntry(metricsData); if (logger.IsVerbose) logger.Verbose("Updating client metrics table entry: {0}", clientMetricsTableEntry); return storage.UpsertTableEntryAsync(clientMetricsTableEntry); }
public Task ReportMetrics(IClientPerformanceMetrics metricsData) { var clientMetricsTableEntry = PopulateClientMetricsDataTableEntry(metricsData); if (logger.IsEnabled(LogLevel.Debug)) { logger.Debug("Updating client metrics table entry: {0}", clientMetricsTableEntry); } return(storage.UpsertTableEntryAsync(clientMetricsTableEntry)); }
/// <summary> /// Either inserts or updates a silo metrics row. /// </summary> /// <param name="deploymentId">The deployment ID.</param> /// <param name="clientId">The client ID.</param> /// <param name="address">The client address information.</param> /// <param name="hostName">The hostname.</param> /// <param name="clientMetrics">The client metrics to be either updated or inserted.</param> /// <returns></returns> internal Task UpsertReportClientMetricsAsync(string deploymentId, string clientId, IPAddress address, string hostName, IClientPerformanceMetrics clientMetrics) { return(ExecuteAsync(dbStoredQueries.UpsertReportClientMetricsKey, command => new DbStoredQueries.Columns(command) { DeploymentId = deploymentId, HostName = hostName, ClientMetrics = clientMetrics, ClientId = clientId, Address = address })); }
/// <summary> /// Writes metrics to the database /// </summary> /// <param name="metricsData">Metrics data</param> /// <returns>Task for database operation</returns> public Task ReportMetrics(IClientPerformanceMetrics metricsData) { if (logger != null && logger.IsVerbose3) { logger.Verbose3("SqlStatisticsPublisher.ReportMetrics (client) called with data: {0}.", metricsData); } try { return(orleansQueries.UpsertReportClientMetricsAsync(deploymentId, clientId, clientAddress, hostName, metricsData)); } catch (Exception ex) { if (logger != null && logger.IsVerbose) { logger.Verbose("SqlStatisticsPublisher.ReportMetrics (client) failed: {0}", ex); } throw; } }
/// <summary> /// Writes metrics to the database /// </summary> /// <param name="metricsData">Metrics data</param> /// <returns>Task for database operation</returns> public async Task ReportMetrics(IClientPerformanceMetrics metricsData) { if (logger.IsEnabled(LogLevel.Trace)) { logger.Trace("SqlStatisticsPublisher.ReportMetrics (client) called with data: {0}.", metricsData); } try { await orleansQueries.UpsertReportClientMetricsAsync(deploymentId, clientId, clientAddress, hostName, metricsData); } catch (Exception ex) { if (logger.IsEnabled(LogLevel.Debug)) { logger.Debug("SqlStatisticsPublisher.ReportMetrics (client) failed: {0}", ex); } throw; } }
public Task ReportMetrics(IClientPerformanceMetrics metricsData) { if (logger != null && logger.IsVerbose3) { logger.Verbose3("SqlStatisticsPublisher.ReportMetrics (client) called with data: {0}.", metricsData); } try { var query = queryConstants.GetConstant(database.InvariantName, QueryKeys.UpsertReportClientMetricsKey); return(database.UpsertReportClientMetricsAsync(query, deploymentId, clientId, clientAddress, hostName, metricsData)); } catch (Exception ex) { if (logger != null && logger.IsVerbose) { logger.Verbose("SqlStatisticsPublisher.ReportMetrics (client) failed: {0}", ex); } throw; } }
private ClientMetricsData PopulateClientMetricsDataTableEntry(IClientPerformanceMetrics metricsData) { var metricsDataObject = new ClientMetricsData { PartitionKey = deploymentId, RowKey = clientId, DeploymentId = deploymentId, ClientId = clientId, Address = address.ToString(), HostName = myHostName, CPU = metricsData.CpuUsage, MemoryUsage = metricsData.MemoryUsage, SendQueue = metricsData.SendQueueLength, ReceiveQueue = metricsData.ReceiveQueueLength, SentMessages = metricsData.SentMessages, ReceivedMessages = metricsData.ReceivedMessages, ConnectedGatewayCount = metricsData.ConnectedGatewayCount }; return(metricsDataObject); }
private void ConvertToClientMetricsRow(IClientPerformanceMetrics metricsData, SqlCommand command) { command.Parameters.Add(new SqlParameter { ParameterName = "@id", DbType = DbType.String, Value = deploymentId }); command.Parameters.Add(new SqlParameter { ParameterName = "@clientid", DbType = DbType.String, Value = clientId }); command.Parameters.Add(new SqlParameter { ParameterName = "@timestamp", DbType = DbType.DateTime, Value = DateTime.UtcNow }); command.Parameters.Add(new SqlParameter { ParameterName = "@address", DbType = DbType.String, Value = clientAddress.ToString() }); command.Parameters.Add(new SqlParameter { ParameterName = "@hostname", DbType = DbType.String, Value = myHostName }); command.Parameters.Add(new SqlParameter { ParameterName = "@cpu", DbType = DbType.Double, Value = (double)metricsData.CpuUsage }); command.Parameters.Add(new SqlParameter { ParameterName = "@memory", DbType = DbType.Int64, Value = metricsData.MemoryUsage }); command.Parameters.Add(new SqlParameter { ParameterName = "@sendqueue", DbType = DbType.Int32, Value = metricsData.SendQueueLength }); command.Parameters.Add(new SqlParameter { ParameterName = "@receivequeue", DbType = DbType.Int32, Value = metricsData.ReceiveQueueLength }); command.Parameters.Add(new SqlParameter { ParameterName = "@sentmessages", DbType = DbType.Int64, Value = metricsData.SentMessages }); command.Parameters.Add(new SqlParameter { ParameterName = "@receivedmessages", DbType = DbType.Int64, Value = metricsData.ReceivedMessages }); command.Parameters.Add(new SqlParameter { ParameterName = "@connectedgatewaycount", DbType = DbType.Int64, Value = metricsData.ConnectedGatewayCount }); }
private ClientMetricsData PopulateClientMetricsDataTableEntry(IClientPerformanceMetrics metricsData) { var metricsDataObject = new ClientMetricsData { PartitionKey = deploymentId, RowKey = clientId, DeploymentId = deploymentId, ClientId = clientId, Address = address.ToString(), HostName = myHostName, CPU = metricsData.CpuUsage, MemoryUsage = metricsData.MemoryUsage, SendQueue = metricsData.SendQueueLength, ReceiveQueue = metricsData.ReceiveQueueLength, SentMessages = metricsData.SentMessages, ReceivedMessages = metricsData.ReceivedMessages, ConnectedGatewayCount = metricsData.ConnectedGatewayCount }; return metricsDataObject; }
public Task ReportMetrics(IClientPerformanceMetrics metricsData) { Telemetry.TrackMetric("CpuUsage", metricsData.CpuUsage); Telemetry.TrackMetric("AvailablePhysicalMemory", metricsData.AvailablePhysicalMemory); Telemetry.TrackMetric("MemoryUsage", metricsData.MemoryUsage); Telemetry.TrackMetric("ReceivedMessages", metricsData.ReceivedMessages); Telemetry.TrackMetric("ReceiveQueueLength", metricsData.ReceiveQueueLength); Telemetry.TrackMetric("SendQueueLength", metricsData.SendQueueLength); Telemetry.TrackMetric("SentMessages", metricsData.SentMessages); Telemetry.TrackMetric("TotalPhysicalMemory", metricsData.TotalPhysicalMemory); Telemetry.TrackMetric("ConnectedGatewayCount", metricsData.ConnectedGatewayCount); return Task.CompletedTask; }
/// <summary> /// Either inserts or updates a silo metrics row. /// </summary> /// <param name="deploymentId">The deployment ID.</param> /// <param name="clientId">The client ID.</param> /// <param name="clientAddress">The client address information.</param> /// <param name="hostName">The hostname.</param> /// <param name="clientMetrics">The client metrics to be either updated or inserted.</param> /// <returns></returns> public async Task UpsertReportClientMetricsAsync(string deploymentId, string clientId, IPAddress clientAddress, string hostName, IClientPerformanceMetrics clientMetrics) { await storage.ExecuteAsync(orleansQueries.UpsertReportClientMetricsKey, command => { var deploymentIdParameter = CreateDeploymentIdParameter(command, deploymentId); command.Parameters.Add(deploymentIdParameter); var clientIdParameter = CreateClientIdParameter(command, clientId); command.Parameters.Add(clientIdParameter); var addressParameter = CreateAddressParameter(command, clientAddress); command.Parameters.Add(addressParameter); var hostNameParameter = CreateHostNameParameter(command, hostName); command.Parameters.Add(hostNameParameter); var cpuUsageParameter = CreateCpuUsageParameter(command, clientMetrics.CpuUsage); command.Parameters.Add(cpuUsageParameter); var memoryUsageParameter = CreateMemoryUsageParameter(command, clientMetrics.MemoryUsage); command.Parameters.Add(memoryUsageParameter); var sendQueueLengthParameter = CreateSendQueueUsageParameter(command, clientMetrics.SendQueueLength); command.Parameters.Add(sendQueueLengthParameter); var receiveQueueParameter = CreateReceiveQueueLengthParameter(command, clientMetrics.ReceiveQueueLength); command.Parameters.Add(receiveQueueParameter); var sentMessagesCountParameter = CreateSentMessagesCountParameter(command, clientMetrics.SentMessages); command.Parameters.Add(sentMessagesCountParameter); var receivedMessagesCountParameter = CreateReceivedMessagesCountParameter(command, clientMetrics.ReceivedMessages); command.Parameters.Add(receivedMessagesCountParameter); var connectionGatewayCountParameter = CreateConnectionGatewayCountParameter(command, clientMetrics.ConnectedGatewayCount); command.Parameters.Add(connectionGatewayCountParameter); }).ConfigureAwait(continueOnCapturedContext: false); }
public Task ReportMetrics(IClientPerformanceMetrics metricsData) { if(logger != null && logger.IsVerbose3) logger.Verbose3("SqlStatisticsPublisher.ReportMetrics (client) called with data: {0}.", metricsData); try { var query = queryConstants.GetConstant(database.InvariantName, QueryKeys.UpsertReportClientMetricsKey); return database.UpsertReportClientMetricsAsync(query, deploymentId, clientId, clientAddress, hostName, metricsData); } catch(Exception ex) { if (logger != null && logger.IsVerbose) logger.Verbose("SqlStatisticsPublisher.ReportMetrics (client) failed: {0}", ex); throw; } }
public Task ReportMetrics(IClientPerformanceMetrics metricsData) { Trace.TraceInformation("{0} ReportMetrics called", GetType().Name); Interlocked.Increment(ref numMetricsCalls); return TaskDone.Done; }
/// <summary> /// Upsert report client metrics. /// </summary> /// <param name="metricsTable"> /// The metrics table. /// </param> /// <param name="clientMetrics"> /// The client metrics. /// </param> /// <returns> /// The <see cref="Task"/>. /// </returns> public async Task UpsertReportClientMetricsAsync(OrleansClientMetricsTable metricsTable, IClientPerformanceMetrics clientMetrics) { metricsTable.CpuUsage = clientMetrics.CpuUsage; metricsTable.MemoryUsage = clientMetrics.MemoryUsage; metricsTable.ReceivedMessages = clientMetrics.ReceivedMessages; metricsTable.SendQueueLength = clientMetrics.SendQueueLength; metricsTable.SentMessages = clientMetrics.SentMessages; metricsTable.ConnectedGateWayCount = clientMetrics.ConnectedGatewayCount; var collection = this.ReturnOrCreateCollection(ClientMetricsTableName); FilterDefinition <BsonDocument> filter = null; BsonDocument document = metricsTable.ToBsonDocument(); filter = Builders <BsonDocument> .Filter.Eq(DeploymentIdName, metricsTable.DeploymentId) & Builders <BsonDocument> .Filter.Eq(ClientIdName, metricsTable.ClientId); await collection.ReplaceOneAsync( filter, document, new UpdateOptions { BypassDocumentValidation = true, IsUpsert = true }); }
/// <summary> /// Either inserts or updates a silo metrics row. /// </summary> /// <param name="storage">The storage to use.</param> /// <param name="query">The query to use.</param> /// <param name="deploymentId">The deployment ID.</param> /// <param name="clientId">The client ID.</param> /// <param name="clientAddress">The client address information.</param> /// <param name="hostName">The hostname.</param> /// <param name="clientMetrics">The client metrics to be either updated or inserted.</param> /// <returns></returns> public static async Task UpsertReportClientMetricsAsync(this IRelationalStorage storage, string query, string deploymentId, string clientId, IPAddress clientAddress, string hostName, IClientPerformanceMetrics clientMetrics) { await storage.ExecuteAsync(query, command => { var direction = ParameterDirection.Input; var deploymentIdParameter = CreateDeploymentIdParameter(command, deploymentId, direction); command.Parameters.Add(deploymentIdParameter); var clientIdParameter = CreateClientIdParameter(command, clientId, direction); command.Parameters.Add(clientIdParameter); var addressParameter = CreateAddressParameter(command, clientAddress, direction); command.Parameters.Add(addressParameter); var hostNameParameter = CreateHostNameParameter(command, hostName, direction); command.Parameters.Add(hostNameParameter); var cpuUsageParameter = CreateCpuUsageParameter(command, clientMetrics.CpuUsage, direction); command.Parameters.Add(cpuUsageParameter); var memoryUsageParameter = CreateMemoryUsageParameter(command, clientMetrics.MemoryUsage, direction); command.Parameters.Add(memoryUsageParameter); var sendQueueLengthParameter = CreateSendQueueUsageParameter(command, clientMetrics.SendQueueLength, direction); command.Parameters.Add(sendQueueLengthParameter); var receiveQueueParameter = CreateReceiveQueueLengthParameter(command, clientMetrics.ReceiveQueueLength, direction); command.Parameters.Add(receiveQueueParameter); var sentMessagesCountParameter = CreateSentMessagesCountParameter(command, clientMetrics.SentMessages, direction); command.Parameters.Add(sentMessagesCountParameter); var receivedMessagesCountParameter = CreateReceivedMessagesCountParameter(command, clientMetrics.ReceivedMessages, direction); command.Parameters.Add(receivedMessagesCountParameter); var connectionGatewayCountParameter = CreateConnectionGatewayCountParameter(command, clientMetrics.ConnectedGatewayCount, direction); command.Parameters.Add(connectionGatewayCountParameter); }).ConfigureAwait(continueOnCapturedContext: false); }
public Task ReportMetrics(IClientPerformanceMetrics metricsData) { return(TaskDone.Done); }
public Task ReportMetrics(IClientPerformanceMetrics metricsData) { Trace.TraceInformation("{0} ReportMetrics called", GetType().Name); Interlocked.Increment(ref numMetricsCalls); return(Task.CompletedTask); }
public Task ReportMetrics(IClientPerformanceMetrics metricsData) { if(logger != null && logger.IsVerbose3) logger.Verbose3("SqlStatisticsPublisher.ReportMetrics (client) called with data: {0}.", metricsData); try { return database.UpsertReportClientMetricsAsync(deploymentId, clientId, clientAddress, hostName, metricsData); } catch(Exception ex) { if (logger != null && logger.IsVerbose) logger.Verbose("SqlStatisticsPublisher.ReportMetrics (client) failed: {0}", ex); throw; } }