using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Prometheus; using System.Net.Http; using System.Net.Http.Headers; using System.Text.Json; using System.Linq; namespace PrometheusExporterEdenic { public class Device { public string id { get; set; } public string name { get; set; } public string label { get; set; } // Add other properties as needed } public class ApiClient { private readonly HttpClient _client; private readonly string _authToken; private readonly string _orgid; private readonly string _apimainurl = "https://api.edenic.io/api/v1/device"; public ApiClient(string authToken, string orgID) { _client = new HttpClient(); _authToken = authToken; _orgid = orgID; _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(_authToken); } public async Task MakeApiRequest(string path) { try { HttpResponseMessage response = await _client.GetAsync($"{_apimainurl}/{_orgid}{path}"); if (response.IsSuccessStatusCode) { string content = await response.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize(content); } else { throw new HttpRequestException($"Error: {response.StatusCode}"); } } catch (HttpRequestException e) { Console.WriteLine($"Request exception: {e.Message}"); throw; } catch (JsonException e) { Console.WriteLine($"JSON parsing exception: {e.Message}"); throw; } } public async Task GetDeviceIdByName(string name) { dynamic result = await MakeApiRequest(""); var jsonString = JsonSerializer.Serialize(result); var devices = JsonSerializer.Deserialize>(jsonString); var targetDevice = devices.FirstOrDefault((Func)(d => d.label == name)); return targetDevice?.id; } } public class Program { public static void Main(string[] args) { string EDENIC_API_TOKEN = Environment.GetEnvironmentVariable("EDENIC_API_TOKEN"); string EDENIC_ORG_ID = Environment.GetEnvironmentVariable("EDENIC_ORG_ID"); ApiClient client = new ApiClient(EDENIC_API_TOKEN, EDENIC_ORG_ID); Console.WriteLine(client.GetDeviceIdByName("The First One")); CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); } public class Startup { public void ConfigureServices(IServiceCollection services) { } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMetricServer(); app.UseHttpMetrics(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Open /metrics"); }); }); var ph = Metrics.CreateGauge("edenic_ph", "Edenic ph"); var temperature = Metrics.CreateGauge("edenic_temperature", "Edenic temperature"); var ec = Metrics.CreateGauge("edenic_ec", "Edenic EC"); Task.Run(async () => { while (true) { ph.Set(1); temperature.Set(1); ec.Set(1); await Task.Delay(15000); } }); } } }