public string GetQlikSenseArchivedFolderLocation(SenseApiSupport senseApiSupport) { dynamic json = senseApiSupport.RequestWithResponse( ApiMethod.Get, $"https://{senseApiSupport.Host}:4242/qrs/ServiceCluster/{_serviceClusterId}", null, null, HttpStatusCode.OK, JToken.Parse); string ret; try { ret = json?.settings?.sharedPersistenceProperties?.archivedLogsRootFolder?.Value ?? ""; } catch (Exception ex) //We dont trust the API to not change case. { _logger.Add($"Failed parsing the ServiceCluster and get the archived folder path moving to case insensitive search {ex}"); var settings = GetNode(json, "settings"); var sharedPersistenceProperties = GetNode(settings?.Value, "sharedPersistenceProperties"); ret = GetNode(sharedPersistenceProperties?.Value, "archivedLogsRootFolder")?.Value ?? ""; } if (string.IsNullOrWhiteSpace(ret)) { _logger.Add($"WARNING-Archived Logs conn string missing."); _logger.Add($"ServiceCluster=>{json?.ToString().Replace(Environment.NewLine, @"\r\n")}"); } return(ret); }
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); } }
private string GetGenericJsonToString(SenseApiSupport senseApiSupport, string url) { var json = senseApiSupport.RequestWithResponse( ApiMethod.Get, url, null, null, HttpStatusCode.OK, p => p); if (string.IsNullOrWhiteSpace(json)) { return(""); } //we are only doing this so the end user can understand the text in the json files. try { dynamic parsedJson = JsonConvert.DeserializeObject(json); return(JsonConvert.SerializeObject(parsedJson, Formatting.Indented)); } catch (Exception e) { Log.To.Main.AddException($"Failed prettifying the json string from {url}", e); return(json); } }
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 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); }
private dynamic GetSenseResponse(string uriPart, SenseApiSupport senseApiSupport) { return(senseApiSupport.RequestWithResponse( ApiMethod.Get, $"https://{senseApiSupport.Host}:{uriPart}", null, null, HttpStatusCode.OK, JToken.Parse)); }
public JArray GetJArray(SenseApiSupport senseApiSupport, string url) { JArray dynamicJson = senseApiSupport.RequestWithResponse( ApiMethod.Get, $"https://{senseApiSupport.Host}:4242/{url}", //qrs/servicestatus/full", null, null, HttpStatusCode.OK, JArray.Parse); return(dynamicJson); }
private bool IsCentralNode(SenseApiSupport senseApiSupport) { dynamic json = senseApiSupport.RequestWithResponse( ApiMethod.Get, $"https://{senseApiSupport.Host}:4242/qrs/servernodeconfiguration/local", null, null, HttpStatusCode.OK, JToken.Parse); return(json.isCentral); }
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 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 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 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); } }
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) { 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); } }
/// <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 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 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 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 SenseConnectDto TryAccessSenseApi(SenseConnectDto dto) { try { _logger.Add($"Trying connecting to Sense Server on {dto.SenseHostName}."); dto.SenseApiSupport = SenseApiSupport.Create(dto.SenseHostName); dto.SenseServerLocationFinderStatus = SenseServerLocationFinderStatus.Success; return(dto); } catch (Exception ex) { if (ex is AggregateException agrEx) { dto.SenseServerLocationFinderStatus = SenseServerLocationFinderStatus.NotAccessable; foreach (var item in agrEx.InnerExceptions) { if (item.Message.Contains("403")) { dto.SenseServerLocationFinderStatus = SenseServerLocationFinderStatus.Forbidden; } } } else { dto.SenseServerLocationFinderStatus = ex.Message.Contains("No valid Qlik Sense client certificate found.") ? SenseServerLocationFinderStatus.NoSertificateFound : SenseServerLocationFinderStatus.NotAccessable; } _logger.Add($"TryAccessSenseApi failed locating api on machine {dto.SenseHostName} with status {dto.SenseServerLocationFinderStatus} and exception {ex}"); if (dto.SenseServerLocationFinderStatus == SenseServerLocationFinderStatus.Undefined) { dto.SenseServerLocationFinderStatus = SenseServerLocationFinderStatus.UnknownFailure; } return(dto); } }
public string GetQlikSenseArchivedFolderLocation(SenseApiSupport senseApiSupport) { string ret; var json = GetSenseResponse($"4242/qrs/ServiceCluster/{_serviceClusterId}", senseApiSupport); try { ret = json?.settings?.sharedPersistenceProperties?.archivedLogsRootFolder?.Value ?? ""; } catch (Exception ex) //We dont trust the API to not change case. { Log.To.Main.Add($"Failed parsing the ServiceCluster and get the archived folder path moving to case insensitive search {ex}"); var settings = GetNode(json, "settings"); var sharedPersistenceProperties = GetNode(settings?.Value, "sharedPersistenceProperties"); ret = GetNode(sharedPersistenceProperties?.Value, "archivedLogsRootFolder")?.Value ?? ""; } if (string.IsNullOrWhiteSpace(ret)) { Log.To.Main.Add($"WARNING-Archived Logs conn string missing."); Log.To.Main.Add($"ServiceCluster=>{json?.ToString().Replace(Environment.NewLine, @"\r\n")}"); } return(ret); }
public string GetQrsProxyService(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { return(GetGenericJsonToString(senseApiSupport, $"https://{senseApiSupport.Host}:4242/qrs/ProxyService/full")); }
public string GetQrsAppList(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { return(GetGenericJsonToString(senseApiSupport, $"https://{senseApiSupport.Host}:4242/qrs/app/full")); }
public string GetQrsServiceCluster(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { return(GetGenericJsonToString(senseApiSupport, $"https://{senseApiSupport.Host}:4242/qrs/ServiceCluster/{_serviceClusterId}")); }
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 string GetQrsDataconnections(SenseApiSupport senseApiSupport, SenseEnums senseEnums) { return(GetGenericJsonToString(senseApiSupport, $"https://{senseApiSupport.Host}:4242/qrs/dataconnection/full")); }
private bool IsCentralNode(SenseApiSupport senseApiSupport) { var json = GetSenseResponse("4242/qrs/servernodeconfiguration/local", senseApiSupport); return(json.isCentral); }
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 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); }
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; } }