// This method is invoked frequently from KEDA to retrieve the metric. The value we return here is from the 'state' variable
        // which is set by the Client_OnMessageReceived above.
        public override Task <GetMetricsResponse> GetMetrics(GetMetricsRequest request, ServerCallContext context)
        {
            _logger.LogInformation($"{DateTime.Now} GetMetrics Called: state: {state}");
            var response = new GetMetricsResponse();

            response.MetricValues.Add(new MetricValue {
                MetricName = "kaboom", MetricValue_ = state
            });
            return(Task.FromResult <GetMetricsResponse>(response));
        }
        public override async Task <GetMetricsResponse> GetMetrics(GetMetricsRequest request, ServerCallContext context)
        {
            _logger.LogInformation($"Namespace: {request?.ScaledObjectRef?.Namespace} DeploymentName: {request?.ScaledObjectRef?.Name} GetMetrics() called.");
            int currentWorkerCount =
                await GetCurrentWorkerCountAsync(request.ScaledObjectRef.Namespace, request.ScaledObjectRef.Name);

            var heartbeat = await _performanceMonitorRepository.PulseAsync(currentWorkerCount);

            int targetSize = 0;

            switch (heartbeat.ScaleRecommendation.Action)
            {
            case ScaleAction.AddWorker:
                targetSize = currentWorkerCount + 1;
                targetSize = targetSize * MLTIPLICITY;
                _logger.LogDebug($"Namespace: {request?.ScaledObjectRef?.Namespace} DeploymentName: {request?.ScaledObjectRef?.Name} GetMetrics() : AddWorker : Target: {targetSize}");
                break;

            case ScaleAction.RemoveWorker:
                targetSize = currentWorkerCount - 1;
                targetSize = targetSize * MLTIPLICITY - (MLTIPLICITY - 1);
                _logger.LogDebug($"Namespace: {request?.ScaledObjectRef?.Namespace} DeploymentName: {request?.ScaledObjectRef?.Name} GetMetrics() : RemoveWorker : Target: {targetSize}");
                break;

            default:
                targetSize = currentWorkerCount;
                targetSize = targetSize * MLTIPLICITY;
                _logger.LogDebug($"Namespace: {request?.ScaledObjectRef?.Namespace} DeploymentName: {request?.ScaledObjectRef?.Name} GetMetrics() : None : Target: {targetSize}");
                break;
            }
            var res         = new GetMetricsResponse();
            var metricValue = new MetricValue
            {
                MetricName   = ScaleRecommendation,
                MetricValue_ = targetSize
            };

            res.MetricValues.Add(metricValue);
            return(res);
        }
        public override async Task <GetMetricsResponse> GetMetrics(GetMetricsRequest request, ServerCallContext context)
        {
            if (!request.ScaledObjectRef.ScalerMetadata.ContainsKey("latitude") ||
                !request.ScaledObjectRef.ScalerMetadata.ContainsKey("longitude"))
            {
                throw new ArgumentException("longitude and latitude must be specified");
            }

            var longitude = request.ScaledObjectRef.ScalerMetadata["longitude"];
            var latitude  = request.ScaledObjectRef.ScalerMetadata["latitude"];

            var earthquakeCount = await GetEarthQuakeCount(longitude, latitude, 1.0);

            var resp = new GetMetricsResponse();

            resp.MetricValues.Add(new MetricValue
            {
                MetricName   = "earthquakeThreshold",
                MetricValue_ = earthquakeCount
            });

            return(resp);
        }
Exemple #4
0
        public override async Task <GetMetricsResponse> GetMetrics(GetMetricsRequest request, ServerCallContext context)
        {
            _logger.LogInformation($"GetMetrics: about to call service: {_urlOfService}");
            var httpRequest = new HttpRequestMessage(HttpMethod.Get, _urlOfService);
            var client      = _httpClientFactory.CreateClient();
            var response    = await client.SendAsync(httpRequest);

            int    result          = 30;
            string responseContent = await response.Content.ReadAsStringAsync();

            _logger.LogInformation($"GetMetrics: response was: {responseContent}");

            int.TryParse(responseContent, out result);

            var metricResponse = new GetMetricsResponse();

            metricResponse.MetricValues.Add(new MetricValue
            {
                MetricName   = "mymetric",
                MetricValue_ = result
            });
            return(metricResponse);
        }