/// <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")); }
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() }); }
/// <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(); }
/// <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))); }