public override ValueTask <CheckResult> CheckAsync(RiasCommandContext context) { var localization = context.Services.GetRequiredService <Localization>(); var isValid = Contexts switch { ContextType.Guild when context.Guild is not null => true, ContextType.DM when context.Guild is null => true, _ => false }; if (isValid) { return(CheckResult.Successful); } var guildId = context.Guild?.Id; var contexts = Contexts.ToString() .Split(",", StringSplitOptions.RemoveEmptyEntries) .Select(x => localization.GetText(guildId, Localization.CommonContextType(x.ToLower()))); var contextsHumanized = contexts.Humanize(x => $"**{x}**", localization.GetText(guildId, Localization.CommonOr).ToLowerInvariant()); return(CheckResult.Failed(localization.GetText(guildId, Localization.AttributeContext, contextsHumanized))); } }
public override Task <CheckResult> PerformCheck() { var dataPathRoot = Path.GetPathRoot(dataPath); if (dataPathRoot == null) { throw new Exception($"Unable to find the root of the data path {dataPath}"); } var dataDriveInfo = new DriveInfo(dataPathRoot); var availableFreeSpace = (decimal)dataDriveInfo.AvailableFreeSpace; var totalSpace = (decimal)dataDriveInfo.TotalSize; var percentRemaining = (decimal)dataDriveInfo.AvailableFreeSpace / dataDriveInfo.TotalSize; if (Logger.IsDebugEnabled) { Logger.Debug($"Free space: {availableFreeSpace} | Total: {totalSpace} | Percent remaining {percentRemaining:P0}"); } if (percentRemaining > percentageThreshold) { return(CheckResult.Pass); } var message = $"{percentRemaining:P0} disk space remaining on data drive '{dataDriveInfo.VolumeLabel} ({dataDriveInfo.RootDirectory})' on '{Environment.MachineName}'."; Logger.Warn(message); return(CheckResult.Failed(message)); }
public override async Task <CheckResult> PerformCheck() { try { using (HttpClient client = new HttpClient { Timeout = TimeSpan.FromSeconds(3), }) using (var response = await client.GetAsync(uri)) { if (response.IsSuccessStatusCode) { logger.InfoFormat("Succeeded in contacting {0}", uri); return(CheckResult.Pass); } string error = $"Failed to contact '{uri}'. HttpStatusCode: {response.StatusCode}"; logger.Info(error); return(CheckResult.Failed(error)); } } catch (Exception exception) { string error = $"Failed to contact '{uri}'. Error: {exception.Message}"; logger.Info(error); return(CheckResult.Failed(error)); } }
public override async Task <CheckResult> PerformCheck() { if (!runCheck) { return(CheckResult.Pass); } Logger.Debug("Checking Dead Letter Queue length"); var managementClient = new ManagementClient(connectionString); try { var queueRuntimeInfo = await managementClient.GetQueueRuntimeInfoAsync(stagingQueue).ConfigureAwait(false); var deadLetterMessageCount = queueRuntimeInfo.MessageCountDetails.DeadLetterMessageCount; if (deadLetterMessageCount > 0) { var result = $"{deadLetterMessageCount} messages in the Dead Letter Queue '{stagingQueue}'. This could indicate a problem with ServiceControl's retries. Please submit a support ticket to Particular using [email protected] if you would like help from our engineers to ensure no message loss while resolving these dead letter messages."; Logger.Warn(result); return(CheckResult.Failed(result)); } Logger.Debug("No messages in Dead Letter Queue"); } finally { await managementClient.CloseAsync().ConfigureAwait(false); } return(CheckResult.Pass); }
public override CheckResult PerformCheck() { using (HttpClient client = new HttpClient { Timeout = TimeSpan.FromSeconds(3), }) { try { using (HttpResponseMessage response = client.GetAsync(uri).Result) { if (response.IsSuccessStatusCode) { logger.Info("Succeeded in contacting " + uri); return(CheckResult.Pass); } string error = string.Format("Failed to contact '{0}'. HttpStatusCode: {1}", uri, response.StatusCode); logger.Info(error); return(CheckResult.Failed(error)); } } catch (Exception exception) { string error = string.Format("Failed to contact '{0}'. Error: {1}", uri, exception.Message); logger.Info(error); return(CheckResult.Failed(error)); } } }
void Run(object state) { CheckResult result; try { result = periodicCheck.PerformCheck(); } catch (Exception ex) { var reason = String.Format("'{0}' implementation failed to run.", periodicCheck.GetType()); result = CheckResult.Failed(reason); Logger.Error(reason, ex); } try { ReportToBackend(result, periodicCheck.Id, periodicCheck.Category, TimeSpan.FromTicks(periodicCheck.Interval.Ticks * 4)); } catch (Exception ex) { Logger.Error("Failed to report periodic check to ServiceControl.", ex); } }
public override ValueTask <CheckResult> CheckAsync(RiasCommandContext context) { var localization = context.Services.GetRequiredService <Localization>(); var currentMember = context.CurrentMember; if (currentMember is null) { return(context.Command.Checks.Any(x => x is ContextAttribute contextAttribute && contextAttribute.Contexts.HasFlag(ContextType.Guild)) ? CheckResult.Successful : CheckResult.Failed(localization.GetText(null, Localization.AttributeBotPermissionNotGuild))); } var guildPermissions = currentMember.GetPermissions(); var hasGuildPermissions = guildPermissions.HasPermission(Permissions); var channelPermissions = currentMember.PermissionsIn(context.Channel); var hasChannelPerm = channelPermissions.HasPermission(Permissions); if (!hasGuildPermissions && !hasChannelPerm) { var guildPermsHumanized = HumanizePermissions(context.Guild !, guildPermissions, localization); return(CheckResult.Failed(localization.GetText(context.Guild !.Id, Localization.AttributeBotGuildPermissions, guildPermsHumanized))); } if (hasGuildPermissions && !hasChannelPerm) { var channelPermsHumanized = HumanizePermissions(context.Guild !, channelPermissions, localization); return(CheckResult.Failed(localization.GetText(context.Guild !.Id, Localization.AttributeBotChannelPermissions, channelPermsHumanized))); } return(CheckResult.Successful); }
public override CheckResult PerformCheck() { try { using (var client = new HttpClient { Timeout = TimeSpan.FromSeconds(3), }) using (var response = client.GetAsync(url).Result) { if (response.IsSuccessStatusCode) { log.Info($"Succeeded in contacting {url}"); return(CheckResult.Pass); } var error = $"Failed to contact '{url}'. HttpStatusCode: {response.StatusCode}"; log.Info(error); return(CheckResult.Failed(error)); } } catch (Exception exception) { var error = $"Failed to contact '{url}'. Error: {exception.Message}"; log.Info(error); return(CheckResult.Failed(error)); } }
public override async Task <CheckResult> PerformCheck() { var start = Stopwatch.StartNew(); try { if (DateTime.UtcNow.Minute % 2 == 0) { throw new InvalidOperationException("Current minute is even so I'm failing."); } using (var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) }) using (var response = await client.GetAsync(url) .ConfigureAwait(false)) { if (response.IsSuccessStatusCode) { log.Info($"Succeeded in contacting {url}"); return(CheckResult.Pass); } var error = $"Failed to contact '{url}'. HttpStatusCode: {response.StatusCode}"; log.Info(error); return(CheckResult.Failed(error)); } } catch (Exception exception) { var error = $"Failed to contact '{url}'. Duration: {start.Elapsed} Error: {exception.Message}"; log.Info(error); return(CheckResult.Failed(error)); } }
public override Task <CheckResult> PerformCheck() { Logger.Debug("Checking Dead Letter Queue length"); float currentValue; string result; try { if (dlqPerformanceCounter == null) { throw new InvalidOperationException("Unable to create performance counter instance."); } currentValue = dlqPerformanceCounter.NextValue(); } catch (InvalidOperationException ex) { result = CounterMightBeLocalized(categoryName, counterName, counterInstanceName); Logger.Warn(result, ex); return(CheckResult.Failed(result)); } if (currentValue <= 0) { Logger.Debug("No messages in Dead Letter Queue"); return(CheckResult.Pass); } result = MessagesInDeadLetterQueue(currentValue); Logger.Warn(result); return(CheckResult.Failed(result)); }
public override Task <CheckResult> PerformCheck() { var failure = criticalErrorHolder.GetLastFailure(); return(failure == null ? successResult : Task.FromResult(CheckResult.Failed(failure))); }
public override Task <CheckResult> PerformCheck() { //code: try Ping service //CheckResult.Pass or CheckResult.Failed with an indicator of why it failed //so can see the custom check failing on the ServicePulse dashboard return(CheckResult.Failed("REST service not reachable")); }
public override CheckResult PerformCheck() { if (Interlocked.Increment(ref counter) / 10 % 2 == 0) { return(CheckResult.Failed("fail!")); } return(CheckResult.Pass); }
public override CheckResult PerformCheck() { if (SomeService.GetStatus()) { return(CheckResult.Pass); } return(CheckResult.Failed("Some service is not available.")); }
public override CheckResult PerformCheck() { if (rnd.Next(0, 1) == 0) { return(CheckResult.Pass); } return(CheckResult.Failed("Because I can")); }
public override ValueTask <CheckResult> CheckAsync(object argument, CommandContext context) { var u = argument.Cast <SocketGuildUser>() ?? throw new ArgumentException($"Cannot use the CheckHierarchy attribute on a type that isn't {typeof(SocketGuildUser)}."); var ctx = context.Cast <VolteContext>(); return(ctx.User.Id != u.Id ? CheckResult.Successful : CheckResult.Failed("You cannot run this command on yourself.")); }
public override ValueTask <CheckResult> CheckAsync(object argument, CommandContext context) { var u = argument.Cast <SocketGuildUser>() ?? throw new ArgumentException($"Cannot use the CheckHierarchy attribute on a type that isn't {typeof(SocketGuildUser)}."); var ctx = context.Cast <VolteContext>(); return(ctx.User.Hierarchy >= u.Hierarchy ? CheckResult.Successful : CheckResult.Failed("Cannot ban someone in a higher, or equal, hierarchy position than yourself.")); }
public override Task <CheckResult> PerformCheck() { if (Interlocked.Increment(ref counter) / 5 % 2 == 1) { return(Task.FromResult(CheckResult.Failed("fail!"))); } return(Task.FromResult(CheckResult.Pass)); }
public override CheckResult PerformCheck() { var currentValue = dlqPerformanceCounter.NextValue(); if (currentValue <= 0) { return(CheckResult.Pass); } return(CheckResult.Failed($"{currentValue} messages in the Dead Letter Queue on {Environment.MachineName}")); }
public override CheckResult PerformCheck() { var dir = @"C:\Foo"; if (!Directory.Exists(dir)) { return(CheckResult.Failed(string.Format("Storage directory '{0}' does not exist", dir))); } return(CheckResult.Pass); }
public override Task <CheckResult> PerformCheck() { if (executed && context.SignalrStarted) { return(Task.FromResult(CheckResult.Failed("Some reason"))); } executed = true; return(Task.FromResult(CheckResult.Pass)); }
public override ValueTask <CheckResult> CheckAsync(CommandContext context) { var ctx = context.Cast <VolteContext>(); if (ctx.IsModerator(ctx.User)) { return(CheckResult.Successful); } return(CheckResult.Failed("Insufficient permission.")); }
public override CheckResult PerformCheck() { if (executed && context.SignalrStarted) { return(CheckResult.Failed("Some reason")); } executed = true; return(CheckResult.Pass); }
public override Task <CheckResult> PerformCheck() { var lastFailure = recentFailure; if (lastFailure != null) { recentFailure = null; return(Task.FromResult(CheckResult.Failed(lastFailure))); } return(Task.FromResult(CheckResult.Pass)); }
public async Task <CheckResult> PerformCheck() { try { await client.GetAsync("/api/Service").ConfigureAwait(false); return(CheckResult.Pass); } catch (Exception e) { Console.WriteLine($"Check failed: {e.Message}"); return(CheckResult.Failed(e.Message)); } }
public override CheckResult PerformCheck() { Logger.Debug("Checking Dead Letter Queue length"); var currentValue = dlqPerformanceCounter.NextValue(); if (currentValue <= 0) { Logger.Debug("No messages in Dead Letter Queue"); return(CheckResult.Pass); } var result = $"{currentValue} messages in the Dead Letter Queue on {Environment.MachineName}. This could indicate a problem with ServiceControl's retries. Please submit a support ticket to Particular using [email protected] if you would like help from our engineers to ensure no message loss while resolving these dead letter messages."; Logger.Warn(result); return(CheckResult.Failed(result)); }
public override async Task <CheckResult> PerformCheck() { using (var session = store.OpenAsyncSession()) { var query = session.Query <FailedErrorImport, FailedErrorImportIndex>(); using (var ie = await session.Advanced.StreamAsync(query).ConfigureAwait(false)) { if (await ie.MoveNextAsync().ConfigureAwait(false)) { Logger.Warn(message); return(CheckResult.Failed(message)); } } } return(CheckResult.Pass); }
public override async Task <CheckResult> PerformCheck() { var httpClient = httpClientFactory(); try { var queryTimeout = TimeSpan.FromSeconds(10); using (var cancellationTokenSource = new CancellationTokenSource(queryTimeout)) { foreach (var remote in remoteInstanceSetting) { remoteQueryTasks.Add(CheckSuccessStatusCode(httpClient, remote, queryTimeout, cancellationTokenSource.Token)); } try { await Task.WhenAll(remoteQueryTasks).ConfigureAwait(false); return(CheckResult.Pass); } catch (Exception) { var builder = new StringBuilder(); foreach (var task in remoteQueryTasks) { try { await task.ConfigureAwait(false); } catch (TimeoutException e) { builder.AppendLine(e.Message); } } return(CheckResult.Failed(builder.ToString())); } } } finally { remoteQueryTasks.Clear(); } }
public override Task <CheckResult> PerformCheck() { Logger.Debug("Checking Dead Letter Queue length"); var queueDescription = namespaceManager.GetQueue(stagingQueue); var messageCountDetails = queueDescription.MessageCountDetails; if (messageCountDetails.DeadLetterMessageCount > 0) { var result = $"{messageCountDetails.DeadLetterMessageCount} messages in the Dead Letter Queue '{stagingQueue}'. This could indicate a problem with ServiceControl's retries. Please submit a support ticket to Particular using [email protected] if you would like help from our engineers to ensure no message loss while resolving these dead letter messages."; Logger.Warn(result); return(CheckResult.Failed(result)); } Logger.Debug("No messages in Dead Letter Queue"); return(CheckResult.Pass); }
public override async Task <CheckResult> PerformCheck() { using (var session = store.OpenAsyncSession()) { var query = session.Query <FailedErrorImport, FailedErrorImportIndex>(); using (var ie = await session.Advanced.StreamAsync(query).ConfigureAwait(false)) { if (await ie.MoveNextAsync().ConfigureAwait(false)) { var message = @"One or more error messages have failed to import properly into ServiceControl and have been stored in the ServiceControl database. The import of these messages could have failed for a number of reasons and ServiceControl is not able to automatically reimport them. For guidance on how to resolve this see https://docs.particular.net/servicecontrol/import-failed-audit-messages"; Logger.Warn(message); return(CheckResult.Failed(message)); } } } return(CheckResult.Pass); }