// 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); }
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); }