Ejemplo n.º 1
0
 public static AutomateMessage ParseGenericLogMessage(string logMessage, string customerName, string subscriptionId, ILogger log)
 {
     if (logMessage.Contains("automate-load-balancer"))
     {
         return(ParesAutomateLoadBalancerLog(logMessage, customerName, subscriptionId, log));
     }
     else
     {
         AutomateMessage automateMessage = new AutomateMessage();
         automateMessage.sourcePackage = "Unknown Entry";
         return(automateMessage);
     }
 }
Ejemplo n.º 2
0
        public static AutomateMessage ParesAutomateLoadBalancerLog(string logMessage, string customerName, string subscriptionId, ILogger log)
        {
            Regex rx = new Regex(@"(.*) \[(.*)\]  ""(.*)"" (\d+) ""(.*)"" (\d+) ""(.*)"" ""(.*)"" ""(.*)"" ""(.*)"" ""(.*)"" (\d+)");
            Match m  = rx.Match(logMessage);

            CultureInfo provider   = CultureInfo.InvariantCulture;
            string      dateFormat = "dd/MMM/yyyy:HH:mm:ss +ffff";

            log.LogDebug("==D A T E T I M E======================================================================");
            log.LogDebug(m.Groups[2].ToString());
            log.LogDebug("==D A T E T I M E======================================================================");

            AutomateMessage automateMessage = new AutomateMessage();

            automateMessage.sourcePackage  = "automate-load-balancer";
            automateMessage.time           = DateTime.ParseExact(m.Groups[2].ToString(), dateFormat, CultureInfo.InvariantCulture);
            automateMessage.message        = m.Groups[3].ToString();
            automateMessage.status         = m.Groups[4].ToString();
            automateMessage.requestTime    = System.Convert.ToDecimal(m.Groups[5].ToString());
            automateMessage.customerName   = customerName;
            automateMessage.subscriptionId = subscriptionId;
            return(automateMessage);
        }
Ejemplo n.º 3
0
        public async Task <HttpResponseMessage> Process(HttpRequest req,
                                                        CloudTable table,
                                                        ILogger log,
                                                        string category)
        {
            HttpResponseMessage msg;

            // Only respond to an HTTP Post
            if (req.Method == "POST")
            {
                // Create dataservice to access data in the config table
                Config      config = new Config();
                DataService ds     = new DataService(table, config);

                // Get all the settings for the CentralLogging partition
                Configs config_store = await ds.GetAll(category);

                Configs central_logging = await ds.GetAll("centralLogging");

                // Get the body of the request
                string   body = await new StreamReader(req.Body).ReadToEndAsync();
                string[] logs = body.Split('}');

                // Create an instance of the LogAnalyticsWriter
                LogAnalyticsWriter log_analytics_writer = new LogAnalyticsWriter(log, config_store, central_logging);

                // Create an instance of AutomateLog which will hold the data that has been submitted
                AutomateLog data = new AutomateLog();

                // iterate around each item in the logs
                string appended_item;
                string log_name;
                foreach (string item in logs)
                {
                    appended_item = item;
                    if (!appended_item.EndsWith("}"))
                    {
                        appended_item += "}";
                    }

                    // output the item to the console
                    log.LogInformation(item);

                    // if the item is not empty, process it
                    if (!string.IsNullOrEmpty(item))
                    {
                        // Deserialise the item into the AutomateLog object
                        data = JsonConvert.DeserializeObject <AutomateLog>(appended_item as string);

                        // From this data create an AutomateMessage object
                        AutomateMessage automate_message = AutomateLogParser.ParseGenericLogMessage(data.MESSAGE_s, config_store.customer_name, config_store.subscription_id, log);

                        // if the message is known then submit to LogAnalytics
                        if (automate_message.sourcePackage.ToLower() != "uknown entry")
                        {
                            // Determine the log name of the message
                            log_name = automate_message.sourcePackage.Replace("-", "") + "log";

                            // Submit the data
                            log_analytics_writer.Submit(automate_message, log_name);
                        }
                    }
                }

                _response.SetMessage("Log data accepted");
                msg = _response.CreateResponse();
            }
            else
            {
                _response.SetError("HTTP Method not supported", true, HttpStatusCode.BadRequest);
                msg = _response.CreateResponse();
            }

            return(msg);
        }