コード例 #1
0
        protected static string GetMetricTypeString(MetricTypes type)
        {
            switch (type)
            {
            case MetricTypes.DebugEngine:
                return("Engine");

            case MetricTypes.PortSupplier:
                return("PortSupplier");

            case MetricTypes.Exception:
                return("Exception");

            case MetricTypes.ExpressionEvaluator:
                return("ExpressionEvaluator");

            case MetricTypes.ExpressionEvaluatorExtension:
                return("EEExtension");

            case MetricTypes.SymbolProvider:
                return("SymbolProvider");

            default:
                throw new ArgumentException();
            }
        }
コード例 #2
0
        protected static string GetMetricTypeString(MetricTypes type)
        {
            switch (type)
            {
            case MetricTypes.DebugEngine:
                return "Engine";

            case MetricTypes.PortSupplier:
                return "PortSupplier";

            case MetricTypes.Exception:
                return "Exception";

            case MetricTypes.ExpressionEvaluator:
                return "ExpressionEvaluator";

            case MetricTypes.ExpressionEvaluatorExtension:
                return "EEExtension";

            case MetricTypes.SymbolProvider:
                return "SymbolProvider";

            default:
                throw new ArgumentException();
            }
        }
コード例 #3
0
 protected DebuggerRegistrationAttribute(MetricTypes type, Guid section)
 {
     MetricType    = type;
     MetricSection = section;
 }
コード例 #4
0
 protected DebuggerRegistrationAttribute(MetricTypes type, Guid section)
 {
     MetricType = type;
     MetricSection = section;
 }
コード例 #5
0
        public async Task <TResponse> Handle <TResponse>(IClusterRequest <TResponse> request) where TResponse : BaseResponse, new()
        {
            _logger.LogDebug(_nodeStateService.GetNodeLogId() + "Detected RPC " + request.GetType().Name + "." + Environment.NewLine + JsonConvert.SerializeObject(request, Formatting.Indented));
            if (!_nodeStateService.IsBootstrapped)
            {
                _logger.LogDebug(_nodeStateService.GetNodeLogId() + "Node is not ready...");

                return(new TResponse()
                {
                    IsSuccessful = false,
                    ErrorMessage = "Node is not ready..."
                });
            }

            if (IsClusterRequest <TResponse>(request) && !_nodeStateService.InCluster)
            {
                _logger.LogWarning(_nodeStateService.GetNodeLogId() + "Reqeuest rejected, node is not apart of cluster...");
                return(new TResponse()
                {
                    IsSuccessful = false,
                    ErrorMessage = "Node is not apart of cluster..."
                });
            }

            DateTime commandStartTime = DateTime.Now;

            try
            {
                TResponse response;
                switch (request)
                {
                case ExecuteCommands t1:
                    response = await HandleIfLeaderOrReroute(request, async() => (TResponse)(object)await _raftService.Handle(t1));

                    break;

                case RequestVote t1:
                    response = (TResponse)(object)await _raftService.Handle(t1);

                    break;

                case AppendEntry t1:
                    response = (TResponse)(object)await _raftService.Handle(t1);

                    break;

                case InstallSnapshot t1:
                    response = (TResponse)(object)await _raftService.Handle(t1);

                    break;

                case RequestCreateIndex t1:
                    response = await HandleIfLeaderOrReroute(request, async() => (TResponse)(object)await _dataService.Handle(t1));

                    break;

                case AddShardWriteOperation t1:
                    response = (TResponse)(object)await _dataService.Handle(t1);

                    break;

                case RequestDataShard t1:
                    response = (TResponse)(object)await _dataService.Handle(t1);

                    break;

                case AllocateShard t1:
                    response = (TResponse)(object)await _dataService.Handle(t1);

                    break;

                case ReplicateShardWriteOperation t1:
                    response = (TResponse)(object)await _dataService.Handle(t1);

                    break;

                case RequestShardWriteOperations t1:
                    response = (TResponse)(object)await _dataService.Handle(t1);

                    break;

                default:
                    throw new Exception("Request is not implemented");
                }

                if (MetricGenerated != null && _nodeStateService.Role == NodeState.Leader && request.Metric)
                {
                    //Add and send
                    if (!lastMetricGenerated.ContainsKey(request.RequestName))
                    {
                        lastMetricGenerated.TryAdd(request.RequestName, DateTime.Now);
                        MetricGenerated.Invoke(this, new Metric()
                        {
                            Date       = DateTime.Now,
                            IntervalMs = 0,
                            Type       = MetricTypes.ClusterCommandElapsed(request.RequestName),
                            Value      = (DateTime.Now - commandStartTime).TotalMilliseconds
                        });
                    }
                    else if ((DateTime.Now - lastMetricGenerated[request.RequestName]).TotalMilliseconds > _clusterOptions.MetricsIntervalMs)
                    {
                        lastMetricGenerated.TryUpdate(request.RequestName, DateTime.Now, lastMetricGenerated[request.RequestName]);
                        MetricGenerated.Invoke(this, new Metric()
                        {
                            Date       = DateTime.Now,
                            IntervalMs = 0,
                            Type       = MetricTypes.ClusterCommandElapsed(request.RequestName),
                            Value      = (DateTime.Now - commandStartTime).TotalMilliseconds
                        });
                    }
                }

                return(response);
            }
            catch (TaskCanceledException e)
            {
                _logger.LogWarning(_nodeStateService.GetNodeLogId() + "Request " + request.RequestName + " timed out...");
                return(new TResponse()
                {
                    IsSuccessful = false
                });
            }
            catch (Exception e)
            {
                _logger.LogError(_nodeStateService.GetNodeLogId() + "Failed to handle request " + request.RequestName + " with error " + e.Message + Environment.StackTrace + e.StackTrace);
                return(new TResponse()
                {
                    IsSuccessful = false
                });
            }
        }
 public PerfomanceMetricAttribute(MetricTypes metricType, string methodName, string tag) : base()
 {
     MetricsFactory.CreateMetric(metricType, methodName, tag);
 }