Ejemplo n.º 1
0
        /// <summary>
        /// Builds and returns query based on Log Request Data
        /// </summary>
        /// <param name="LogreqData"></param>
        /// <returns></returns>
        private string BuildQuery(LogRequestData LogreqData)
        {
            //string queryDetails = $"traces | where cloud_RoleInstance == 'RD281878654B81' | where timestamp >= datetime(2019 - 10 - 01T09: 30:00Z) and timestamp <= datetime(2019 - 10 - 06T10: 30:00Z) | where severityLevel == 3 | project timestamp, message,severityLevel,cloud_RoleName | order by timestamp desc"
            string msgQuery = string.Empty;

            if (!string.IsNullOrEmpty(LogreqData.Message) && !string.IsNullOrEmpty(LogreqData.ExpressionType))
            {
                msgQuery = $" | where message {ToDescriptionString(LogreqData.ExpressionType)} '{LogreqData.Message}'";
            }
            var    logTypes      = LogreqData.LogType.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            string severityLevel = "";

            foreach (var logtype in logTypes)
            {
                if (string.IsNullOrEmpty(severityLevel))
                {
                    severityLevel += $" severityLevel == {logtype}";
                }
                else
                {
                    severityLevel += $" or severityLevel == {logtype}";
                }
            }

            string limit = $" | limit { (LogreqData.Limit > 5000 ? "5000" : LogreqData.Limit.ToString())}";

            return(System.Web.HttpUtility.UrlPathEncode($"query= traces | where cloud_RoleInstance == '{LogreqData.CloudInstance}' {msgQuery} | where timestamp >= datetime('{LogreqData.FromDate.ToUniversalTime().ToString()}') and timestamp <= datetime('{LogreqData.ToDate.ToUniversalTime().ToString()}') | where {severityLevel} | project timestamp, message,severityLevel,cloud_RoleName { limit } | order by timestamp desc"));
        }
Ejemplo n.º 2
0
        public LogResponseData GetLogs(LogRequestData LogreqData)
        {
            string responseData = GetTelemetry(BuildQuery(LogreqData));

            Models.TableData azureTables = Newtonsoft.Json.JsonConvert.DeserializeObject <Models.TableData>(responseData);

            /// if table data returned is empty
            if (azureTables.tables.Count == 0)
            {
                return new LogResponseData()
                       {
                           ContainsErrors = false,
                           NumberOfRows   = 0,
                           Logs           = new System.Collections.Generic.List <LogData>()
                       }
            }
            ;

            return(new LogResponseData()
            {
                ContainsErrors = false,
                NumberOfRows = azureTables.tables[0].rows.Count, // take default table
                Logs = azureTables.tables[0].rows.Select(x => new LogData()
                {
                    TimeStamp = DateTime.Parse(x[0]), LogMessage = x[1], LogType = this.ParseEnum <LogType>(x[2])
                }).ToList()
            });
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Processes a request with logging info. Unit testable.
        ///
        /// Returns log info in easily digestable format.
        /// </summary>
        /// <param name="json">JSON sent from client by AjaxAppender</param>
        /// <param name="serverSideTimeUtc">Current time in UTC</param>
        /// <param name="jsnlogConfiguration">Contains all config info</param>
        internal static List <FinalLogData> ProcessLogRequestExec(string json, LogRequestBase logRequestBase,
                                                                  DateTime serverSideTimeUtc, JsnlogConfiguration jsnlogConfiguration)
        {
            var          logDatas = new List <FinalLogData>();
            FinalLogData logData  = null;

            try
            {
                LogRequestData logRequestData = LogMessageHelpers.DeserializeJson <LogRequestData>(json);

                foreach (var logItem in logRequestData.lg)
                {
                    logData = null; // in case ProcessLogItem throws exception
                    logData = ProcessLogItem(logItem,
                                             logRequestBase, serverSideTimeUtc, jsnlogConfiguration);

                    if (logData != null)
                    {
                        logDatas.Add(logData);
                    }
                }
            }
            catch (Exception e)
            {
                try
                {
                    string message = string.Format("Exception: {0}, json: {1}, FinalLogData: {{{2}}}, logRequestBase: {{{3}}}", e, json, logData, logRequestBase);

                    var internalErrorFinalLogData = new FinalLogData(null)
                    {
                        FinalMessage = message,
                        FinalLogger  = Constants.JSNLogInternalErrorLoggerName,
                        FinalLevel   = Level.ERROR
                    };

                    logDatas.Add(internalErrorFinalLogData);
                }
                catch
                {
                }
            }

            return(logDatas);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public static void ProcessRequest_Handler(object sender, EventArgs e)
        {
            HttpApplication   currentHttpApplication = (HttpApplication)sender;
            HttpRequest       currentHttpRequest     = currentHttpApplication.Request;
            LogRequestData    objLogRequestData      = new LogRequestData();
            RequestToValidate objRequestToValidate   = new RequestToValidate();

            objRequestToValidate.HttpRequestToAnalyse = currentHttpRequest;
            objLogRequestData.addEntry("Starting ProcessRequest_Handler Processing Page: " + objRequestToValidate.HttpRequestToAnalyse.Path);
            objRequestToValidate.pageClassName = ReflectionUtils.resolvePageClassName();
            objLogRequestData.addEntry("Page's class identified has: <b>" + objRequestToValidate.pageClassName + "</b>");
            if (objRequestToValidate.validateCurrentPage(pagesToProcess))
            {
                objLogRequestData.addEntry((string)hashtableWithValidator_FormMappings[objRequestToValidate.pageClassName].ToString());
                objLogRequestData.addEntry("Validating Current Page");
                if (objRequestToValidate.pageHasItemsToValidate())
                {
                    objLogRequestData.addEntry("Page has Items to Validated");
                    if (ReflectionUtils.makeTheRequestFormDataEditable())
                    {
                        objLogRequestData.addEntry("the private method HttpContext.Current.Request.Form.MakeReadWrite() was successfully invoked");
                        ArrayList listOfRulesProcessed = objRequestToValidate.validateAndHandleMaliciousInput((XmlElement)hashtableWithValidator_FormMappings[objRequestToValidate.pageClassName], hashtableWithValidator_FormRules);
                        foreach (string item in listOfRulesProcessed)
                        {
                            objLogRequestData.addEntry(item);
                        }
                    }
                    else
                    {
                        objLogRequestData.addEntry("ERROR!!: makeTheRequestFormDataEditable failed");
                    }
                }
                else
                {
                    objLogRequestData.addEntry("Nothing to Validate");
                }
            }
            else
            {
                objLogRequestData.addEntry("Not Validating");
            }
            objLogRequestData.outputMessage();
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Processes a request with logging info. Unit testable.
        ///
        /// Returns log info in easily digestable format.
        /// </summary>
        /// <param name="json">JSON sent from client by AjaxAppender</param>
        /// <param name="serverSideTimeUtc">Current time in UTC</param>
        /// <param name="url">Url of the log request</param>
        /// <param name="requestId">requestId taken from the log request</param>
        /// <param name="xe">The JSNLog element in web.config</param>
        public static List <LogData> ProcessLogRequestExec(string json, string userAgent, string userHostAddress,
                                                           DateTime serverSideTimeUtc, string url, string requestId, XmlElement xe)
        {
            List <LogData> logDatas = new List <LogData>();

            try
            {
                JavaScriptSerializer js             = new JavaScriptSerializer();
                LogRequestData       logRequestData = js.Deserialize <LogRequestData>(json);

                Object[] logItems = (Object[])(logRequestData["lg"]);

                foreach (Object logItem in logItems)
                {
                    LogData logData = ProcessLogItem((Dictionary <string, Object>)logItem, userAgent, userHostAddress, requestId, serverSideTimeUtc, url, xe);
                    logDatas.Add(logData);
                }
            }
            catch (Exception e)
            {
                try
                {
                    ILog log = LogManager.GetLogger(Constants.JSNLogInternalErrorLoggerName);

                    string message =
                        string.Format(
                            "json: {0}, userAgent: {1}, userHostAddress: {2}, serverSideTimeUtc: {3}, url: {4}, exception: {5}",
                            json, userAgent, userHostAddress, serverSideTimeUtc, url, e);

                    var logData = new LogData(message, Constants.JSNLogInternalErrorLoggerName, Constants.Level.ERROR,
                                              5000, "", 5000, "", "", serverSideTimeUtc, serverSideTimeUtc,
                                              Utils.UtcToLocalDateTime(serverSideTimeUtc), Utils.UtcToLocalDateTime(serverSideTimeUtc),
                                              userAgent, userHostAddress, url);

                    logDatas.Add(logData);
                }
                catch
                {
                }
            }

            return(logDatas);
        }
 public IHttpActionResult GetLogData(LogRequestData logRequestData)
 {
     //Get logs based on requested data
     return(Ok(_logViewerService.GetLogs(logRequestData)));
 }