Esempio n. 1
0
        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();
                }
            }
        }
Esempio n. 2
0
        /// <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
     }));
 }
Esempio n. 6
0
 /// <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;
     }
 }
Esempio n. 7
0
 /// <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;
     }
 }
Esempio n. 8
0
 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);
        }
Esempio n. 10
0
 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;
 }
Esempio n. 13
0
 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 });
 }
Esempio n. 14
0
        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();
                }
            }
        }
Esempio n. 15
0
        /// <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;
     }
 }
Esempio n. 17
0
 public Task ReportMetrics(IClientPerformanceMetrics metricsData)
 {
     Trace.TraceInformation("{0} ReportMetrics called", GetType().Name);
     Interlocked.Increment(ref numMetricsCalls);
     return TaskDone.Done;
 }
Esempio n. 18
0
        /// <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);
 }
Esempio n. 21
0
 public Task ReportMetrics(IClientPerformanceMetrics metricsData)
 {
     Trace.TraceInformation("{0} ReportMetrics called", GetType().Name);
     Interlocked.Increment(ref numMetricsCalls);
     return(Task.CompletedTask);
 }
Esempio n. 22
0
 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;
     }
 }