using System; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using ClockifyReport.Exception; //using Microsoft.Azure.WebJobs; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Microsoft.Azure.Functions.Worker; namespace ClockifyReport { public class Function1 { private readonly ILogger _logger; public static string clockifyApiKey = Environment.GetEnvironmentVariable("ClockifyApiKey"); public static string workspaceId = Environment.GetEnvironmentVariable("ClockifyWorkspaceId"); static HttpClient client; public Function1(ILoggerFactory loggerFactory) { _logger = loggerFactory.CreateLogger(); } public static void InitializeClockifyIntegration() { client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", clockifyApiKey); client.BaseAddress = new Uri("https://reports.api.clockify.me/v1"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept .Add(new MediaTypeWithQualityHeaderValue("application/json")); } [Function("Function1")] [QueueOutput("clockify-queue")] public string Run([TimerTrigger("*/20 * * * * *")]TimerInfo myTimer, ILogger log) { InitializeClockifyIntegration(); // Clockify API Integration var monday = "2022-08-01"; //DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek + (int)DayOfWeek.Monday).ToString("yyyy-MM-dd"); var friday = "2022-08-05";//DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek + (int)DayOfWeek.Friday).ToString("yyyy-MM-dd"); var json = "{\"dateRangeStart\":\"" + monday + "T00:00:00.000\",\"dateRangeEnd\":\"" + friday + "T23:59:59.000\",\"summaryFilter\":{\"groups\":[\"USER\",\"TIMEENTRY\"]},\"clients\":{\"ids\":[\"61488f8d9eb0753d0e40d761\"]},\"projects\":{\"ids\":[\"6242f015f6fe850b94cd0c64\"]},\"amountShown\":\"HIDE_AMOUNT\"}"; HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json"); HttpResponseMessage response = client.PostAsync(client.BaseAddress + "/workspaces/" + workspaceId + "/reports/summary", httpContent).Result; client.Dispose(); if (response.IsSuccessStatusCode) { _logger.LogInformation($"Data collection successfull!"); return JsonConvert.SerializeObject(JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result), Formatting.Indented); } else { _logger.LogInformation($"Request failed. Error status code: {(int)response.StatusCode}"); throw new HttpErrorStatusCodeException(response.StatusCode); } } } }