示例#1
0
        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));
        }