public static void Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log) { _log = log; LogInformation($"C# Timer trigger function executed at: {DateTime.Now}"); LoadConfiguration(); if (string.IsNullOrEmpty(Settings.OpenWeatherKey)) { LogInformation("No OpenWeather API Key provided, function will generate random data"); } // Set up OMF Ingress Service _omfIngressService = ConfigureOcsOmf(Settings.OcsUri, Settings.OcsTenantId, Settings.OcsNamespaceId, Settings.OcsClientId, Settings.OcsClientSecret); // Send OMF Type message SendOmfMessage(_omfIngressService, OmfMessageCreator.CreateTypeMessage(typeof(CurrentWeather))); // Prepare OMF containers var typeId = ClrToOmfTypeConverter.Convert(typeof(CurrentWeather)).Id; var containers = new List <OmfContainer>(); var data = new List <OmfDataContainer>(); var queries = Settings.OpenWeatherQueries.Split('|'); foreach (var query in queries) { if (!string.IsNullOrEmpty(Settings.OpenWeatherKey)) { // Get Current Weather Data var response = JsonConvert.DeserializeObject <JObject>(HttpGet($"{Settings.OpenWeatherUri}?q={query}&appid={Settings.OpenWeatherKey}")); // Parse data into OMF messages var value = new CurrentWeather(response); var streamId = $"OpenWeather_Current_{value.Name}"; containers.Add(new OmfContainer(streamId, typeId)); var omfValue = (OmfObjectValue)ClrToOmfValueConverter.Convert(value); data.Add(new OmfDataContainer(streamId, new List <OmfObjectValue>() { omfValue })); } else { // No key provided, generate random data containers.Add(new OmfContainer(query, typeId)); var value = new CurrentWeather(query); var omfValue = (OmfObjectValue)ClrToOmfValueConverter.Convert(value); data.Add(new OmfDataContainer(query, new List <OmfObjectValue>() { omfValue })); } } SendOmfMessage(_omfIngressService, new OmfContainerMessage(containers)); LogInformation($"Sent {containers.Count} containers"); SendOmfMessage(_omfIngressService, new OmfDataMessage(data)); LogInformation($"Sent {data.Count} data messages"); }
/// <summary> /// Sends OMF data messages for a dictionary of OMF data keyed by the stream ID to the configured OMF endpoints /// </summary> /// <typeparam name="T">OMF type of the OMF data to be sent</typeparam> /// <param name="data">Dictionary of OMF data keyed by the stream ID</param> internal void SendOmfData <T>(Dictionary <string, T> data) { var dataContainers = new List <OmfDataContainer>(); foreach (var streamId in data.Keys) { var omfValue = (OmfObjectValue)ClrToOmfValueConverter.Convert(data[streamId]); dataContainers.Add(new OmfDataContainer(streamId, new List <OmfObjectValue>() { omfValue })); } SendOmfMessage(new OmfDataMessage(dataContainers)); }