public void Execute() { try { var host = Settings.GetSetting("SenseNodeStatusMonitor.HostName", "localhost"); if ((_senseApiSupport == null) || (_senseApiSupport.Host != host)) { _senseApiSupport = Settings.GetBool("SenseNodeStatusMonitor.UseHttp", false) ? SenseApiSupport.CreateHttp(host) : SenseApiSupport.Create(host); } SenseEnums senseEnums = new SenseEnums(_senseApiSupport); var serviceStatuses = GetServiceStatusFull(senseEnums); foreach (ServiceStatusFullDto dto in serviceStatuses) { var key = dto.ServerNodeHostName + "_" + dto.ServiceTypeId; _groupedNotifyer.AddIfMissing(key, $"Node down {dto.ServiceTypeName} on {dto.ServerNodeHostName}", ""); _groupedNotifyer.Analyze(key, dto.ServiceStateId); } _groupedNotifyer.AnalyzeRoundFinished(); } catch (Exception ex) { _senseApiSupport = null; Log.To.Main.AddException($"Failed executing {MonitorName}", ex); } }
public QlikSenseQrsAbout GetQrsAbout(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { var serverNodeConfigJson = GetSenseResponse("4242/qrs/about", senseApiSupport); var qlikSenseQrsAbout = new QlikSenseQrsAbout { BuildVersion = _jsonHelper.GetString(serverNodeConfigJson, "buildVersion"), BuildDate = _jsonHelper.GetString(serverNodeConfigJson, "buildDate"), DatabaseProvider = _jsonHelper.GetString(serverNodeConfigJson, "databaseProvider"), NodeType = _jsonHelper.GetInt(serverNodeConfigJson, "nodeType") }; return(qlikSenseQrsAbout); }
public void Execute() { try { var host = Settings.GetSetting($"{MonitorName}.HostName", "(undefined)"); if (host.Equals("(undefined)", StringComparison.InvariantCultureIgnoreCase)) { host = (Dns.GetHostEntry(Dns.GetHostName()).HostName).ToLower(); } var senseApi = SenseApiSupport.Create(host); var helper = new SenseApiHelper(); SenseEnums senseEnums = new SenseEnums(senseApi); var data = new StatisticsDto(); try { data.QLikSenseCalInfo = helper.ExecuteCalAgentWithOverview(senseApi, senseEnums); } catch (Exception ex) { Trace.WriteLine(ex); try { data.QLikSenseCalInfo = helper.ExecuteCalAgent(senseApi, senseEnums); } catch (Exception e) { data.Exceptions.Add(e); } } try { data.QlikSenseLicenseAgent = helper.ExecuteLicenseAgent(senseApi, senseEnums); } catch (Exception e) { data.Exceptions.Add(e); } try { data.QlikSenseServiceInfo = helper.GetQlikSenseServiceInfos(senseApi, senseEnums).ToList(); } catch (Exception e) { data.Exceptions.Add(e); } if (_sentToday != DateTime.Now.Day) { _sentToday = DateTime.Now.Day; try { data.QlikSenseQrsAbout = helper.GetQrsAbout(senseApi, senseEnums); } catch (Exception e) { data.Exceptions.Add(e); } try { data.QlikSenseAboutSystemInfo = helper.GetAboutSystemInfo(senseApi, senseEnums); } catch (Exception e) { data.Exceptions.Add(e); } try { data.QlikSenseAppListShort = helper.GetQrsAppListShort(senseApi, senseEnums).ToList(); } catch (Exception e) { data.Exceptions.Add(e); } try { data.QlikSenseMachineInfos = helper.GetQlikSenseMachineInfos(senseApi, senseEnums).ToList(); } catch (Exception e) { data.Exceptions.Add(e); } } data.InstallationId = $"{data.QlikSenseLicenseAgent?.LicenseSerialNo ?? "(unknown)"}_{data.QlikSenseServiceInfo?.FirstOrDefault()?.ServiceClusterId.ToString() ?? "(unknown)"} "; Notify($"{MonitorName} has analyzed the following system", new List <string> { JsonConvert.SerializeObject(data, Formatting.Indented) }, "-1"); } catch (Exception ex) { Log.To.Main.AddException($"Failed executing {MonitorName}", ex); } }
private List <ServiceStatusFullDto> GetServiceStatusFull(SenseEnums senseEnums) { var dynamicJson = new QmsHelper().GetJArray(_senseApiSupport, "qrs/servicestatus/full"); var ret = new List <ServiceStatusFullDto>(); foreach (dynamic serviceStatusStruct in dynamicJson) { ret.Add(new ServiceStatusFullDto { ServiceTypeId = serviceStatusStruct.serviceType, ServiceStateId = serviceStatusStruct.serviceState, Timestamp = serviceStatusStruct.timestamp, ServerNodeName = serviceStatusStruct.serverNodeConfiguration.name, ServerNodeHostName = serviceStatusStruct.serverNodeConfiguration.hostName, ServiceTypeName = senseEnums.GetValue("ServiceTypeEnum", (int)serviceStatusStruct.serviceType, string.Format(Constants.SENSE_API_MISSING_VALUE, serviceStatusStruct.serviceType)), ServiceStateName = senseEnums.GetValue("ServiceStateEnum", (int)serviceStatusStruct.serviceState, string.Format(Constants.SENSE_API_MISSING_VALUE, serviceStatusStruct.serviceState)), }); } return(ret); }
public QlikSenseQrsAbout GetQrsAbout(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { dynamic serverNodeConfigJson = senseApiSupport.RequestWithResponse( ApiMethod.Get, $"https://{senseApiSupport.Host}:4242/qrs/about", null, null, HttpStatusCode.OK, JToken.Parse); //foreach (dynamic serverNodeStruct in serverNodeConfigJson) //{ //var a = serverNodeConfigJson.nodeType; var qlikSenseQrsAbout = new QlikSenseQrsAbout { BuildVersion = GetString(serverNodeConfigJson, "buildVersion"), BuildDate = GetString(serverNodeConfigJson, "buildDate"), DatabaseProvider = GetString(serverNodeConfigJson, "databaseProvider"), NodeType = GetInt(serverNodeConfigJson, "nodeType") }; return(qlikSenseQrsAbout); }
public Dictionary <string, QlikSenseAppObjectsShort> GetQlikSenseAppObjectInfos(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { var json = GetSenseResponse("4242/qrs/app/object/full", senseApiSupport); var analyzer = new Dictionary <string, QlikSenseAppObjectsShort>(); foreach (dynamic data in json) { var appid = _jsonHelper.GetString(data, new [] { "app", "id" }); var type = _jsonHelper.GetString(data, "objectType"); if (!analyzer.TryGetValue(appid, out QlikSenseAppObjectsShort value)) { value = new QlikSenseAppObjectsShort { AppId = appid }; analyzer.Add(appid, value); } if (string.Equals(type, "sheet", StringComparison.InvariantCultureIgnoreCase)) { value.Sheets++; } else { value.Objects++; } } return(analyzer); }
/// <summary> /// /// </summary> /// <param name="senseApiSupport"></param> /// <param name="senseEnums"></param> /// <returns></returns> public IEnumerable <QlikSenseMachineInfo> GetQlikSenseMachineInfos(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { var serverNodeConfigJson = GetSenseResponse("4242/qrs/servernodeconfiguration/full", senseApiSupport); foreach (dynamic serverNodeStruct in serverNodeConfigJson) { var nodePurposeId = _jsonHelper.GetInt(serverNodeStruct, "nodePurpose"); var qlikSenseMachineInfo = new QlikSenseMachineInfo { HostName = _jsonHelper.GetString(serverNodeStruct, "hostName"), ServiceClusterId = _jsonHelper.GetGuid(serverNodeStruct, new[] { "serviceCluster", "id" }), Name = _jsonHelper.GetString(serverNodeStruct, "name"), IsCentral = _jsonHelper.GetBool(serverNodeStruct, "isCentral"), NodePurpose = senseEnums.GetValue("NodePurposeEnum", nodePurposeId, MISSING_VALUE), ModifiedDate = _jsonHelper.GetDate(serverNodeStruct, "modifiedDate") }; _serviceClusterId = qlikSenseMachineInfo.ServiceClusterId; yield return(qlikSenseMachineInfo); } }
public IEnumerable <QlikSenseComponent> GetAboutComponents(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { var senseComponentsJson = GetSenseResponse("9032/v1/components", senseApiSupport); foreach (dynamic component in senseComponentsJson) { var senseComponent = new QlikSenseComponent { Component = _jsonHelper.GetString(component, "component"), Version = _jsonHelper.GetString(component, "version") }; yield return(senseComponent); } }
public string GetQrsDataconnections(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { return(GetGenericJsonToString(senseApiSupport, $"https://{senseApiSupport.Host}:4242/qrs/dataconnection/full")); }
public QlikSenseLicenseInfo ExecuteLicenseAgent(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { string lef; string serial; bool isExpired; string expiredReason; bool isBlacklisted; try { var licenseJson = GetSenseResponse("4242/qrs/license", senseApiSupport); lef = licenseJson.lef; serial = licenseJson.serial; isExpired = licenseJson.isExpired; expiredReason = licenseJson.expiredReason; isBlacklisted = licenseJson.isBlacklisted; if (lef.Length > 0) { Match prodlevelMatch = Regex.Match(lef, REGEX_PATTERN_PRODUCTLEVEL); Match timelimitMatch = Regex.Match(lef, REGEX_PATTERN_TIMELIMIT); if (!prodlevelMatch.Success && !timelimitMatch.Success) { return(null); } int lefDateFormatLength = DateTime.UtcNow.ToString(LEF_DATE_FORMAT).Length; Func <Match, DateTime> parseLefDateTimeString = match => { if (!match.Success) { return(DateTime.MaxValue); } DateTime dateTime; string dateTimeString = match.Value.Substring(match.Value.Length - lefDateFormatLength, lefDateFormatLength); if (!DateTime.TryParseExact( dateTimeString, LEF_DATE_FORMAT, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out dateTime)) { dateTime = DateTime.MaxValue; } return(dateTime.Date); }; DateTime prodlevelEndDate = parseLefDateTimeString(prodlevelMatch); DateTime timelimitEndDate = parseLefDateTimeString(timelimitMatch); // Get the closest date of the two DateTime firstEndDate = prodlevelEndDate <= timelimitEndDate ? prodlevelEndDate : timelimitEndDate; return(new QlikSenseLicenseInfo { ExpireDate = firstEndDate.AsDatapointString(), LicenseSerialNo = serial, IsExpired = isExpired ? 1 : 0, ExpiredReason = expiredReason, IsBlacklisted = isBlacklisted ? 1 : 0 }); } } catch (WebException exception) { if ((senseApiSupport != null) && (exception.Status == WebExceptionStatus.ProtocolError) && (exception.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.Forbidden) { // The certificate seems to have gone bad... throw new Exception("Failed getting License info. Probably a sertificate issue."); } throw; } return(new QlikSenseLicenseInfo { ExpireDate = null, LicenseSerialNo = serial, IsExpired = isExpired ? 1 : 0, ExpiredReason = expiredReason, IsBlacklisted = isBlacklisted ? 1 : 0 }); }
public string GetQrsProxyService(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { return(GetGenericJsonToString(senseApiSupport, $"https://{senseApiSupport.Host}:4242/qrs/ProxyService/full")); }
public IEnumerable <QlikSenseServiceInfo> GetQlikSenseServiceInfos(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { var serviceStatusJson = GetSenseResponse("4242/qrs/servicestatus/full", senseApiSupport); foreach (dynamic serviceStatusStruct in serviceStatusJson) { int serviceTypeId = _jsonHelper.GetInt(serviceStatusStruct, "serviceType"); int serviceStateId = _jsonHelper.GetInt(serviceStatusStruct, "serviceState"); var qlikSenseServiceInfo = new QlikSenseServiceInfo { ServiceType = senseEnums.GetValue("ServiceTypeEnum", serviceTypeId, MISSING_VALUE), HostName = _jsonHelper.GetString(serviceStatusStruct, new[] { "serverNodeConfiguration", "hostName" }), ServiceClusterId = _jsonHelper.GetGuid(serviceStatusStruct, new[] { "serverNodeConfiguration", "serviceCluster", "id" }), ServiceState = senseEnums.GetValue("ServiceStateEnum", serviceStateId, MISSING_VALUE), ModifiedDate = _jsonHelper.GetDate(serviceStatusStruct, "modifiedDate") }; yield return(qlikSenseServiceInfo); } }
public QLikSenseCalInfo ExecuteCalAgent(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { try { if (!IsCentralNode(senseApiSupport)) { // The "/qrs/license/accesstypeinfo"-call can only be executed on the central node. return(null); } var calJson = GetSenseResponse("4242/qrs/license/accesstypeinfo", senseApiSupport); Func <JObject, string, double> getDouble = (jObject, propertyName) => jObject?.GetValue(propertyName).ToObject <double>() ?? 0; double totalTokens = calJson.totalTokens; double availableTokens = calJson.availableTokens; JObject userAccessType = calJson.userAccessType; double userAllocatedTokens = getDouble(userAccessType, "allocatedTokens"); double userUsedTokens = getDouble(userAccessType, "usedTokens"); double userQuarantinedTokens = getDouble(userAccessType, "quarantinedTokens"); JObject loginAccessType = calJson.loginAccessType; double loginAllocatedTokens = getDouble(loginAccessType, "allocatedTokens"); double loginUsedTokens = getDouble(loginAccessType, "usedTokens"); double loginUnavailableTokens = getDouble(loginAccessType, "unavailableTokens"); JObject applicationAccessType = calJson.applicationAccessType; double applicationAllocatedTokens = getDouble(applicationAccessType, "allocatedTokens"); double applicationUsedTokens = getDouble(applicationAccessType, "usedTokens"); double applicationQuarantinedTokens = getDouble(applicationAccessType, "quarantinedTokens"); JObject professionalAccessType = calJson.professionalAccessType; double professionalAllocatedTokens = getDouble(professionalAccessType, "allocatedTokens"); double professionalUsedTokens = getDouble(professionalAccessType, "usedTokens"); double professionalQuarantinedTokens = getDouble(professionalAccessType, "quarantinedTokens"); JObject analyzerAccessType = calJson.analyzerAccessType; double analyzerAllocatedTokens = getDouble(analyzerAccessType, "allocatedTokens"); double analyzerUsedTokens = getDouble(analyzerAccessType, "usedTokens"); double analyzerQuarantinedTokens = getDouble(analyzerAccessType, "quarantinedTokens"); var ret = new QLikSenseCalInfo { TotalTokens = totalTokens, AvailableTokens = availableTokens, UserAllocatedTokens = userAllocatedTokens, UserUsedTokens = userUsedTokens, UserQuarantinedTokens = userQuarantinedTokens, LoginAllocatedTokens = loginAllocatedTokens, LoginUsedTokens = loginUsedTokens, LoginUnavailableTokens = loginUnavailableTokens, ApplicationAllocatedTokens = applicationAllocatedTokens, ApplicationUsedTokens = applicationUsedTokens, ApplicationQuarantinedTokens = applicationQuarantinedTokens, ProfessionalAllocatedTokens = professionalAllocatedTokens, ProfessionalUsedTokens = professionalUsedTokens, ProfessionalQuarantinedTokens = professionalQuarantinedTokens, AnalyzerAllocatedTokens = analyzerAllocatedTokens, AnalyzerUsedTokens = analyzerUsedTokens, AnalyzerQuarantinedTokens = analyzerQuarantinedTokens }; return(ret); } catch (WebException exception) { if ((senseApiSupport != null) && (exception.Status == WebExceptionStatus.ProtocolError) && (exception.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.Forbidden) { // The certificate seems to have gone bad... throw new Exception("Failed getting Cal info. Probably a certificate issue."); // Exit silently and retry the next time. } throw; } }
public QlikSenseAboutSystemInfo GetAboutSystemInfo(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { dynamic senseSystemInfoJson = senseApiSupport.RequestWithResponse( ApiMethod.Get, $"https://{senseApiSupport.Host}:9032/v1/systeminfo", null, null, HttpStatusCode.OK, JToken.Parse); var senseSystemInfo = new QlikSenseAboutSystemInfo { SenseId = GetString(senseSystemInfoJson, "senseId"), Version = GetString(senseSystemInfoJson, "version"), DeploymentType = GetString(senseSystemInfoJson, "deploymentType"), ReleaseLabel = GetString(senseSystemInfoJson, "releaseLabel"), ProductName = GetString(senseSystemInfoJson, "productName"), CopyrightYearRange = GetString(senseSystemInfoJson, "copyrightYearRange"), }; return(senseSystemInfo); }
public void Execute() { try { var host = Settings.GetSetting($"{MonitorName}.HostName", "localhost"); if ((_senseApiSupport == null) || (_senseApiSupport.Host != host)) { _senseApiSupport = SenseApiSupport.Create(host); } SenseEnums senseEnums = new SenseEnums(_senseApiSupport); var taskHelper = new TaskHelper(); var tasks = taskHelper.GetAllTasksFullDto(_senseApiSupport, senseEnums); var filter = new Regex(Settings.GetSetting($"{MonitorName}.Filter").Trim(), RegexOptions.IgnoreCase); var negativeFilter = new Regex(Settings.GetSetting($"{MonitorName}.NegativeFilter").Trim(), RegexOptions.IgnoreCase); foreach (var dto in tasks) { if (filter.ToString() == string.Empty || filter.IsMatch(dto.Name) || filter.IsMatch(dto.Taskid.ToString())) { if (negativeFilter.ToString() != string.Empty && (negativeFilter.IsMatch(dto.Name) || negativeFilter.IsMatch(dto.Taskid.ToString()))) { continue; } } else { continue; } var key = dto.Taskid.ToString(); if (dto.Enabled.GetValueOrDefault(false)) { //what bucket var bucket = GetScheduledTimeBucket(dto); TimeSpan?ruleDuration = null; switch (bucket) { case IncrementOptionEnum.Hourly: ruleDuration = TimeSpan.FromSeconds(Settings.GetInt32($"{MonitorName}.HourlyDurationInSeconds", 0)); break; case IncrementOptionEnum.Daily: ruleDuration = TimeSpan.FromSeconds(Settings.GetInt32($"{MonitorName}.DailyDurationInSeconds", 0)); break; case IncrementOptionEnum.Weekly: ruleDuration = TimeSpan.FromSeconds(Settings.GetInt32($"{MonitorName}.WeeklyDurationInSeconds", 0)); break; case IncrementOptionEnum.Monthly: ruleDuration = TimeSpan.FromSeconds(Settings.GetInt32($"{MonitorName}.MonthlyDurationInSeconds", 0)); break; } if (ruleDuration.GetValueOrDefault(TimeSpan.FromSeconds(0)) < TimeSpan.FromSeconds(1)) { continue; // ignore buckets with no defined minimum execution duration } _groupedNotifyer.AddIfMissing(key, dto.Name); //check if the schedule has changed bucket. if (_groupedNotifyer.GetSettings(key).Duration != ruleDuration) { _groupedNotifyer.GetSettings(key).Duration = ruleDuration.GetValueOrDefault(TimeSpan.FromSeconds(0)); continue; // don't analyze this time around. Material change rule duration. } _groupedNotifyer.Analyze(key, dto.Operational?.LastExecutionResult?.Status ?? -1); } } _groupedNotifyer.AnalyzeRoundFinished(); } catch (Exception ex) { _senseApiSupport = null; Log.To.Main.AddException($"Failed executing {MonitorName}", ex); } }
public IEnumerable <QlikSenseComponent> GetAboutComponents(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { dynamic senseComponentsJson = senseApiSupport.RequestWithResponse( ApiMethod.Get, $"https://{senseApiSupport.Host}:9032/v1/components", null, null, HttpStatusCode.OK, JToken.Parse); foreach (dynamic component in senseComponentsJson) { var senseComponent = new QlikSenseComponent { Component = GetString(component, "component"), Version = GetString(component, "version") }; yield return(senseComponent); } }
public IEnumerable <QlikSenseServiceInfo> GetQlikSenseServiceInfos(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { dynamic serviceStatusJson = senseApiSupport.RequestWithResponse( ApiMethod.Get, $"https://{senseApiSupport.Host}:4242/qrs/servicestatus/full", null, null, HttpStatusCode.OK, JArray.Parse); foreach (dynamic serviceStatusStruct in serviceStatusJson) { int serviceTypeId = GetInt(serviceStatusStruct, "serviceType"); int serviceStateId = GetInt(serviceStatusStruct, "serviceState"); var qlikSenseServiceInfo = new QlikSenseServiceInfo { ServiceType = senseEnums.GetValue("ServiceTypeEnum", serviceTypeId, MISSING_VALUE), HostName = GetString(serviceStatusStruct, new [] { "serverNodeConfiguration", "hostName" }), ServiceClusterId = GetGuid(serviceStatusStruct, new [] { "serverNodeConfiguration", "serviceCluster", "id" }), ServiceState = senseEnums.GetValue("ServiceStateEnum", serviceStateId, MISSING_VALUE), ModifiedDate = GetDate(serviceStatusStruct, "modifiedDate") }; yield return(qlikSenseServiceInfo); } }
/// <summary> /// /// </summary> /// <param name="senseApiSupport"></param> /// <param name="senseEnums"></param> /// <returns></returns> public IEnumerable <QlikSenseMachineInfo> GetQlikSenseMachineInfos(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { dynamic serverNodeConfigJson = senseApiSupport.RequestWithResponse( ApiMethod.Get, $"https://{senseApiSupport.Host}:4242/qrs/servernodeconfiguration/full", null, null, HttpStatusCode.OK, JToken.Parse); foreach (dynamic serverNodeStruct in serverNodeConfigJson) { var nodePurposeId = GetInt(serverNodeStruct, "nodePurpose"); var qlikSenseMachineInfo = new QlikSenseMachineInfo { HostName = GetString(serverNodeStruct, "hostName"), ServiceClusterId = GetGuid(serverNodeStruct, new [] { "serviceCluster", "id" }), Name = GetString(serverNodeStruct, "name"), IsCentral = GetBool(serverNodeStruct, "isCentral"), NodePurpose = senseEnums.GetValue("NodePurposeEnum", nodePurposeId, MISSING_VALUE), ModifiedDate = GetDate(serverNodeStruct, "modifiedDate") }; _serviceClusterId = qlikSenseMachineInfo.ServiceClusterId; yield return(qlikSenseMachineInfo); } }
public List <QlikSenseAppListShort> GetQrsAppListShort(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { var resp = GetSenseResponse("4242/qrs/app/full", senseApiSupport); var ret = new List <QlikSenseAppListShort>(); Dictionary <String, QlikSenseAppObjectsShort> appObjs; try { appObjs = GetQlikSenseAppObjectInfos(senseApiSupport, senseEnums); } catch (Exception e) { Log.To.Main.AddException("Failed accessing the app objects in GetQrsAppListShort", e); appObjs = new Dictionary <string, QlikSenseAppObjectsShort>(); } foreach (dynamic item in resp) { //var a = serverNodeConfigJson.nodeType; var id = _jsonHelper.GetString(item, "id"); appObjs.TryGetValue(id, out QlikSenseAppObjectsShort appObj); ret.Add(new QlikSenseAppListShort { Id = id, AppObjects = appObj?.Objects ?? 0, SheetObjects = appObj?.Sheets ?? 0, CreatedDate = _jsonHelper.GetString(item, "createdDate"), ModifiedDate = _jsonHelper.GetString(item, "modifiedDate"), PublishTime = _jsonHelper.GetString(item, "publishTime"), Published = _jsonHelper.GetString(item, "published"), FileSize = _jsonHelper.GetString(item, "fileSize"), LastReloadTime = _jsonHelper.GetString(item, "lastReloadTime") }); } return(ret); }
public void Execute() { try { var logFileDirector = new LogFileDirector(FileSystem.Singleton); var logMinerData = new FileMinerDto(); var data = new StatisticsDto { LogFileMinerData = logMinerData, CollectionDateUtc = logMinerData.CollectionDateUtc }; string archivedLogsLocation; //default we ask sense for the settings needed. if (String.IsNullOrWhiteSpace(Settings.GetSetting($"{MonitorName}.OverideLogFilePath", "")) && String.IsNullOrWhiteSpace(Settings.GetSetting($"{MonitorName}.LicenseSerialNo", "")) && String.IsNullOrWhiteSpace(Settings.GetSetting($"{MonitorName}.ServiceClusterId", ""))) { var host = Settings.GetSetting($"{MonitorName}.HostName", "(undefined)"); if (host.Equals("(undefined)", StringComparison.InvariantCultureIgnoreCase)) { host = (Dns.GetHostEntry(Dns.GetHostName()).HostName).ToLower(); } var senseApi = SenseApiSupport.Create(host); var helper = new SenseApiHelper(); SenseEnums senseEnums = new SenseEnums(senseApi); try { data.QlikSenseMachineInfos = helper.GetQlikSenseMachineInfos(senseApi, senseEnums).ToList(); } catch (Exception e) { data.Exceptions.Add(e); } try { data.QlikSenseLicenseAgent = helper.ExecuteLicenseAgent(senseApi, senseEnums); } catch (Exception e) { data.Exceptions.Add(e); } try { data.QlikSenseServiceInfo = helper.GetQlikSenseServiceInfos(senseApi, senseEnums).ToList(); } catch (Exception e) { data.Exceptions.Add(e); } archivedLogsLocation = helper.GetQlikSenseArchivedFolderLocation(senseApi); _installationId = $"{data.QlikSenseLicenseAgent?.LicenseSerialNo ?? "(unknown)"}_{data.QlikSenseServiceInfo?.FirstOrDefault()?.ServiceClusterId.ToString() ?? "(unknown)"} "; _licenseSerialNr = data.QlikSenseLicenseAgent?.LicenseSerialNo ?? "(unknown)"; data.QlikSenseLicenseAgent = null; data.QlikSenseServiceInfo = null; data.QlikSenseMachineInfos = null; } else // pull from settings { _licenseSerialNr = Settings.GetSetting($"{MonitorName}.LicenseSerialNo", ""); _installationId = $"{_licenseSerialNr}_{Settings.GetSetting($"{MonitorName}.ServiceClusterId", "")}"; archivedLogsLocation = Settings.GetSetting($"{MonitorName}.OverideLogFilePath", ""); } data.InstallationId = _installationId; data.LogFileMinerData.LicenseSerialNo = _licenseSerialNr; //string archivedLogsLocation = @"C:\temp\ArchivedLogs";//@"D:\SFDCData\files\01471384\SenseCollector_e8e2d1bc-3c1e-41d7-9a9c-0cac78c7539d\SenseCollector_e8e2d1bc-3c1e-41d7-9a9c-0cac78c7539d"; //get yesterday +1 var settings = new LogFileDirectorSettings { StartDateForLogs = DateTime.Now.AddDays(-2).Date, StopDateForLogs = DateTime.Now.AddDays(-1).Date.AddMilliseconds(-1), }; //settings.StartDateForLogs = DateTime.Parse("2018-08-27 00:00:00"); //settings.StopDateForLogs = DateTime.Parse("2018-08-27 23:59:59"); settings.StartDateForLogs = DateTime.Parse("2019-03-09 00:00:00").AddDays(FAKERUNCOUNT); settings.StopDateForLogs = DateTime.Parse("2019-03-09 23:59:59").AddDays(FAKERUNCOUNT); logFileDirector.LoadAndRead(new[] { new DirectorySetting(archivedLogsLocation) }, settings, logMinerData); //persisting current days apps and users for more analysis. var db = new GjallarhornDb(FileSystem.Singleton); CheckMontlySending(settings.StartDateForLogs.Month); db.AddToMontlyStats(logMinerData.TotalUniqueActiveAppsList, settings.StartDateForLogs.Year, settings.StartDateForLogs.Month, MontlyStatsType.Apps); db.AddToMontlyStats(logMinerData.TotalUniqueActiveUsersList, settings.StartDateForLogs.Year, settings.StartDateForLogs.Month, MontlyStatsType.Users); Trace.WriteLine($"{settings.StartDateForLogs.ToString("yyyy-MM-dd")} sessionCount=>{data.LogFileMinerData.TotalNrOfSessions} on FakeRun:{FAKERUNCOUNT}"); Notify($"{MonitorName} has analyzed the following system", new List <string> { JsonConvert.SerializeObject(data, Formatting.Indented) }, "-1"); FAKERUNCOUNT++; } catch (Exception ex) { Log.To.Main.AddException($"Failed executing {MonitorName}", ex); } }
public QLikSenseCalInfo ExecuteCalAgentWithOverview(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { try { var calJson = GetSenseResponse("4242/qrs/license/accesstypeoverview", senseApiSupport); Func <JObject, string, double> getDouble = (jObject, propertyName) => jObject?.GetValue(propertyName).ToObject <double>() ?? 0; Func <JObject, string, bool> getBool = (jObject, propertyName) => jObject?.GetValue(propertyName).ToObject <bool>() ?? false; double totalTokens = calJson.totalTokens; double availableTokens = calJson.availableTokens; JObject userAccessType = calJson.userAccess; double userAllocatedTokens = getDouble(userAccessType, "allocatedTokens"); double userUsedTokens = getDouble(userAccessType, "usedTokens"); double userQuarantinedTokens = getDouble(userAccessType, "quarantinedTokens"); JObject loginAccessType = calJson.loginAccess; double loginAllocatedTokens = getDouble(loginAccessType, "allocatedTokens"); double loginUsedTokens = getDouble(loginAccessType, "usedTokens"); double loginUnavailableTokens = getDouble(loginAccessType, "unavailableTokens"); //JObject applicationAccessType = calJson.applicationAccess; //double applicationAllocatedTokens = getDouble(applicationAccessType, "allocatedTokens"); //double applicationUsedTokens = getDouble(applicationAccessType, "usedTokens"); //double applicationQuarantinedTokens = getDouble(applicationAccessType, "quarantinedTokens"); JObject professionalAccessType = calJson.professionalAccess; double professionalAllocatedTokens = getDouble(professionalAccessType, "allocated"); double professionalUsedTokens = getDouble(professionalAccessType, "used"); double professionalQuarantinedTokens = getDouble(professionalAccessType, "quarantined"); double professionalTotalTokens = getDouble(professionalAccessType, "total"); JObject analyzerAccessType = calJson.analyzerAccess; double analyzerAllocatedTokens = getDouble(analyzerAccessType, "allocated"); double analyzerUsedTokens = getDouble(analyzerAccessType, "used"); double analyzerQuarantinedTokens = getDouble(analyzerAccessType, "quarantined"); double analyzerTotalTokens = getDouble(analyzerAccessType, "total"); JObject analyzerTimeAccessType = calJson.analyzerTimeAccess; var timeAccessEnabled = getBool(analyzerTimeAccessType, "enabled"); double analyzerTimeAllocatedMinutes = timeAccessEnabled ? getDouble(analyzerTimeAccessType, "allocatedMinutes") : 0; double analyzerTimeUsedMinutes = timeAccessEnabled ? getDouble(analyzerTimeAccessType, "usedMinutes") : 0; double analyzerTimeUnavailableMinutes = timeAccessEnabled ? getDouble(analyzerTimeAccessType, "unavailableMinutes") : 0; var ret = new QLikSenseCalInfo { TotalTokens = totalTokens, AvailableTokens = availableTokens, UserAllocatedTokens = userAllocatedTokens, UserUsedTokens = userUsedTokens, UserQuarantinedTokens = userQuarantinedTokens, LoginAllocatedTokens = loginAllocatedTokens, LoginUsedTokens = loginUsedTokens, LoginUnavailableTokens = loginUnavailableTokens, AnalyzerTimeAllocatedMinutes = analyzerTimeAllocatedMinutes, AnalyzerTimeUsedMinutes = analyzerTimeUsedMinutes, AnalyzerTimeUnavailableMinutes = analyzerTimeUnavailableMinutes, ProfessionalAllocatedTokens = professionalAllocatedTokens, ProfessionalTotalTokens = professionalTotalTokens, ProfessionalUsedTokens = professionalUsedTokens, ProfessionalQuarantinedTokens = professionalQuarantinedTokens, AnalyzerAllocatedTokens = analyzerAllocatedTokens, AnalyzerUsedTokens = analyzerUsedTokens, AnalyzerQuarantinedTokens = analyzerQuarantinedTokens, AnalyzerTotalTokens = analyzerTotalTokens, }; return(ret); } catch (WebException exception) { if ((senseApiSupport != null) && (exception.Status == WebExceptionStatus.ProtocolError) && (exception.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.Forbidden) { // The certificate seems to have gone bad... throw new Exception("Failed getting Cal info. Probably a certificate issue."); } throw; } }
private async Task <List <Task> > GetTasksForFullRun(SenseConnectDto dto) { var senseApi = new SenseApiCollector(_logger); var taskList = new List <Task>(); _logger.Add("Sense api connected"); SenseEnums statusEnums = null; QlikSenseMachineInfo[] qlikSenseMachineInfos = null; await Task.Run(() => { statusEnums = new SenseEnums(dto.SenseApiSupport); }).ConfigureAwait(false); _logger.Add("Sense Machine infos collected"); var archivedLogsLocation = string.Empty; if (statusEnums == null) { throw new Exception("Failed accessing sense"); } await Task.Run(() => qlikSenseMachineInfos = GetQlikSenseMachineInfos(senseApi, dto.SenseApiSupport, statusEnums)).ConfigureAwait(false); try { archivedLogsLocation = senseApi.GetQlikSenseArchivedFolderLocation(dto.SenseApiSupport); _logger.Add($"Accessing archived logs at {archivedLogsLocation}."); if (!_filesystem.DirectoryExists(archivedLogsLocation)) { archivedLogsLocation = PathToArchivedLogsDlg.Invoke(archivedLogsLocation); } } catch (Exception ex) { _logger.Add("Failed retreiving Archived folder location from API " + ex); } taskList.Add(Task.Run(async() => { if (ServiceVariables.AllowSenseInfo) { try { var nodeCount = qlikSenseMachineInfos?.Length ?? 0; _notify($"Collecting Information from {nodeCount} Qlik Sense {(nodeCount > 1 ? "nodes" : "node")}.", MessageLevels.Animate, "SenseInfo"); _logger.Add($"Running CommandLineRemoteTasks."); await RunCommandLineRemoteTasks(qlikSenseMachineInfos).ConfigureAwait(false); _logger.Add($"Running GettingAllSettingsFiles."); await RunGettingAllSettingsFiles(qlikSenseMachineInfos).ConfigureAwait(false); _notify("Collecting Qlik Sense Information.", MessageLevels.Animate, "SenseInfo"); _logger.Add($"Running Get all api info."); _collectorHelper.WriteContentToFile(qlikSenseMachineInfos, "qlikSenseMachineInfo"); _collectorHelper.RunAction(() => senseApi.GetQlikSenseServiceInfos(dto.SenseApiSupport, statusEnums).ToArray(), "qlikSenseServiceInfo"); _collectorHelper.RunAction(() => senseApi.GetQrsAbout(dto.SenseApiSupport, statusEnums), "QrsAbout"); _collectorHelper.RunAction(() => senseApi.ExecuteCalAgent(dto.SenseApiSupport, statusEnums), "CalInfo"); _collectorHelper.RunAction(() => senseApi.ExecuteLicenseAgent(dto.SenseApiSupport, statusEnums), "LicenseAgent"); _collectorHelper.RunAction(() => senseApi.GetAboutSystemInfo(dto.SenseApiSupport, statusEnums), "AboutSystemInfo"); _collectorHelper.RunAction(() => senseApi.GetAboutComponents(dto.SenseApiSupport, statusEnums), "AboutComponents"); _collectorHelper.RunAction(() => senseApi.GetQrsDataconnections(dto.SenseApiSupport, statusEnums), "DataConnections"); _collectorHelper.RunAction(() => senseApi.GetQrsServiceCluster(dto.SenseApiSupport, statusEnums), "ServiceCluster"); _collectorHelper.RunAction(() => senseApi.GetQrsProxyService(dto.SenseApiSupport, statusEnums), "ProxyService"); _collectorHelper.RunAction(() => senseApi.GetQrsAppList(dto.SenseApiSupport, statusEnums), "AppList"); _collectorHelper.RunAction(() => senseApi.GetQrsDataConnections(dto.SenseApiSupport, statusEnums), "dataconnectionList"); _logger.Add($"Finished senseInfo"); _notify("Collected Qlik Sense Information.", MessageLevels.Ok, "SenseInfo"); } catch (Exception e) { _logger.Add("Failed getting sense info", e); _notify("Failed collecting Qlik Sense Information.", MessageLevels.Error, "SenseInfo"); } } })); var readerTaskHelper = new SenseLogReaderTasks(_logger, LogDirectorDone, _notify); if (ServiceVariables.AllowRemoteLogs) { taskList.Add(readerTaskHelper.ReadRemoteLogs(qlikSenseMachineInfos, ServiceVariables)); } if (ServiceVariables.AllowArchivedLogs) { taskList.Add(readerTaskHelper.ReadArchivedLogs(archivedLogsLocation, ServiceVariables)); } return(taskList); }
public string GetQrsServiceCluster(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { return(GetGenericJsonToString(senseApiSupport, $"https://{senseApiSupport.Host}:4242/qrs/ServiceCluster/{_serviceClusterId}")); }
private QlikSenseMachineInfo[] GetQlikSenseMachineInfos(SenseApiCollector senseApi, SenseApiSupport senseApiSupport, SenseEnums statusEnums) { try { return(senseApi.GetQlikSenseMachineInfos(senseApiSupport, statusEnums).ToArray()); } catch (Exception e) { _logger.Add("Failed accessing Sense machine Infos", e); throw; } }
public string GetQrsAppList(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { return(GetGenericJsonToString(senseApiSupport, $"https://{senseApiSupport.Host}:4242/qrs/app/full")); }
public List <TaskDto> GetAllTasksFullDto(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { var dynamicJson = new QmsHelper().GetJArray(senseApiSupport, "qrs/task/full"); var ret = new List <TaskDto>(); foreach (dynamic serviceStatusStruct in dynamicJson) { try { var task = new TaskDto { Taskid = serviceStatusStruct.id, Createddate = serviceStatusStruct.createdDate, Modifieddate = serviceStatusStruct.modifiedDate, Modifiedbyusername = serviceStatusStruct.modifiedByUserName, Ismanuallytriggered = serviceStatusStruct.isManuallyTriggered, Name = serviceStatusStruct.name, Tasktype = serviceStatusStruct.taskType, Enabled = serviceStatusStruct.enabled, Tasksessiontimeout = serviceStatusStruct.taskSessionTimeout, Maxretries = serviceStatusStruct.maxRetries, Impactsecurityaccess = serviceStatusStruct.impactSecurityAccess, Schemapath = serviceStatusStruct.schemaPath, }; if (serviceStatusStruct.app != null) { task.App = new AppDto { AppId = serviceStatusStruct.app.id, Name = serviceStatusStruct.app.name, Publishtime = serviceStatusStruct.app.publishTime, Published = serviceStatusStruct.app.published, Savedinproductversion = serviceStatusStruct.app.savedInProductVersion, Migrationhash = serviceStatusStruct.app.migrationHash, Availabilitystatus = serviceStatusStruct.app.availabilityStatus }; if (serviceStatusStruct.app.stream != null) { task.App.Stream = new StreamDto { Name = serviceStatusStruct.app.stream.name, StreamId = serviceStatusStruct.app.stream.id }; } } if (serviceStatusStruct.operational != null) { task.Operational = new TaskOperationalDto { NextExecution = serviceStatusStruct.operational.nextExecution, OperationalId = serviceStatusStruct.operational.id, //ExecutionResult = new TaskLastExecutionResultDto }; if (serviceStatusStruct.operational.lastExecutionResult != null) { task.Operational.LastExecutionResult = new TaskLastExecutionResultDto { LastexecutionresultId = serviceStatusStruct.operational.lastExecutionResult.id, Executingnodename = serviceStatusStruct.operational.lastExecutionResult.executingNodeName, Status = serviceStatusStruct.operational.lastExecutionResult.status, StatusName = senseEnums.GetValue("StatusEnum", (int)serviceStatusStruct.operational.lastExecutionResult.status, string.Format(Constants.SENSE_API_MISSING_VALUE, serviceStatusStruct.operational.lastExecutionResult.status)), Starttime = serviceStatusStruct.operational.lastExecutionResult.startTime, Stoptime = serviceStatusStruct.operational.lastExecutionResult.stopTime, Duration = serviceStatusStruct.operational.lastExecutionResult.duration, Filereferenceid = serviceStatusStruct.operational.lastExecutionResult.fileReferenceID, Scriptlogavailable = serviceStatusStruct.operational.lastExecutionResult.scriptLogAvailable }; if (serviceStatusStruct.operational.lastExecutionResult.details != null) { task.Operational.LastExecutionResult.LastExecutionResultDetails = new List <TaskLastExecutionResultDetailsDto>(); foreach (dynamic details in serviceStatusStruct.operational.lastExecutionResult.details) { task.Operational.LastExecutionResult.LastExecutionResultDetails.Add(new TaskLastExecutionResultDetailsDto { Detailcreateddate = details.detailCreatedDate, DetailsId = details.id, Detailstype = details.detailsType, Message = details.message }); } } } } ret.Add(task); } catch (Exception e) { Debug.WriteLine(e); } } return(ret); }
public QlikSenseAboutSystemInfo GetAboutSystemInfo(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { var senseSystemInfoJson = GetSenseResponse("9032/v1/systeminfo", senseApiSupport); var senseSystemInfo = new QlikSenseAboutSystemInfo { SenseId = _jsonHelper.GetString(senseSystemInfoJson, "senseId"), Version = _jsonHelper.GetString(senseSystemInfoJson, "version"), DeploymentType = _jsonHelper.GetString(senseSystemInfoJson, "deploymentType"), ReleaseLabel = _jsonHelper.GetString(senseSystemInfoJson, "releaseLabel"), ProductName = _jsonHelper.GetString(senseSystemInfoJson, "productName"), CopyrightYearRange = _jsonHelper.GetString(senseSystemInfoJson, "copyrightYearRange"), }; return(senseSystemInfo); }
public List <QlikSenseAppListShort> GetQrsAppListShort(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { dynamic resp = senseApiSupport.RequestWithResponse( ApiMethod.Get, $"https://{senseApiSupport.Host}:4242/qrs/app/full", null, null, HttpStatusCode.OK, JToken.Parse); var ret = new List <QlikSenseAppListShort>(); foreach (dynamic item in resp) { //var a = serverNodeConfigJson.nodeType; ret.Add(new QlikSenseAppListShort { Id = GetString(item, "id"), CreatedDate = GetString(item, "createdDate"), ModifiedDate = GetString(item, "modifiedDate"), PublishTime = GetString(item, "publishTime"), Published = GetString(item, "published"), FileSize = GetString(item, "fileSize"), LastReloadTime = GetString(item, "lastReloadTime") }); } return(ret); }