// using System.IO;
// using System.Threading.Tasks;
// using Microsoft.AspNetCore.Http;
// using Microsoft.AspNetCore.Mvc;
// using Microsoft.AspNetCore.Routing;
// using Microsoft.AspNetCore.Authorization;
// using Microsoft.Extensions.Logging;
// using Newtonsoft.Json.Linq;
// using AyaNova.Models;
// using AyaNova.Api.ControllerHelpers;
// using AyaNova.Biz;
// namespace AyaNova.Api.Controllers
// {
// ///
// /// Log files controller
// ///
// [ApiController]
// [ApiVersion("8.0")]
// [Route("api/v{version:apiVersion}/metric")]
// [Authorize]
// public class MetricsController : ControllerBase
// {
// private readonly AyContext ct;
// private readonly ILogger log;
// private readonly ApiServerState serverState;
// ///
// /// ctor
// ///
// ///
// ///
// ///
// public MetricsController(AyContext dbcontext, ILogger logger, ApiServerState apiServerState)
// {
// ct = dbcontext;
// log = logger;
// serverState = apiServerState;
// }
// ///
// /// Get metrics as text document
// ///
// /// Snapshot of metrics
// [HttpGet("textsnapshot")]
// public async Task GetMetrics()
// {
// if (serverState.IsClosed)
// return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
// if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.Metrics))
// {
// return StatusCode(403, new ApiNotAuthorizedResponse());
// }
// string sResult = await GetTheMetrics("plain");
// //Log
// await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserIdFromContext.Id(HttpContext.Items), 0, AyaType.Metrics, AyaEvent.Retrieved), ct);
// return Content(sResult);
// }
// ///
// /// Get metrics as json object
// ///
// /// Snapshot of metrics
// [HttpGet("jsonsnapshot")]
// public async Task GetJsonMetrics()
// {
// if (serverState.IsClosed)
// return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
// if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.Metrics))
// {
// return StatusCode(403, new ApiNotAuthorizedResponse());
// }
// string sResult = await GetTheMetrics("json");
// JObject json = JObject.Parse(sResult);
// //Log
// await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserIdFromContext.Id(HttpContext.Items), 0, AyaType.Metrics, AyaEvent.Retrieved), ct);
// return Ok(ApiOkResponse.Response(json));
// }
// ///
// /// Get the metrics snapshot
// ///
// /// Either "json" for json format or "plain" for plaintext format
// ///
// private async Task GetTheMetrics(string format)
// {
// var snapshot = metrics.Snapshot.Get();
// var formatters = ((IMetricsRoot)metrics).OutputMetricsFormatters;
// string sResult = $"ERROR GETTING METRICS IN {format} FORMAT";
// foreach (var formatter in formatters)
// {
// if (formatter.MediaType.Format == format)
// {
// using (var stream = new MemoryStream())
// {
// await formatter.WriteAsync(stream, snapshot);
// sResult = System.Text.Encoding.UTF8.GetString(stream.ToArray());
// }
// }
// }
// return sResult;
// }
// //------------
// }
// }