コード例 #1
0
        public void GetMonitoringApi_ReturnsNonNullInstance()
        {
            MongoStorage   storage = CreateStorage();
            IMonitoringApi api     = storage.GetMonitoringApi();

            Assert.NotNull(api);
        }
コード例 #2
0
    public void GetMonitoringApi_ReturnsNonNullInstance()
    {
        CosmosDbStorage storage = new(url, secret, database, container);
        IMonitoringApi  api     = storage.GetMonitoringApi();

        Assert.NotNull(api);
    }
コード例 #3
0
    public void WithExistingCosmosClient_GetMonitoringApi_ReturnsNonNullInstance()
    {
        CosmosDbStorage storage = CreateSutWithCosmosClient();
        IMonitoringApi  api     = storage.GetMonitoringApi();

        Assert.NotNull(api);
    }
コード例 #4
0
        public RedisTagsMonitoringApi(IMonitoringApi monitoringApi)
        {
            if (monitoringApi.GetType().Name != "RedisMonitoringApi")
            {
                throw new ArgumentException("The monitor API is not implemented using Redis", nameof(monitoringApi));
            }
            _monitoringApi = monitoringApi;

            // Dirty, but lazy...we would like to execute these commands in the same transaction, so we're resorting to reflection for now

            // Other transaction type, clear cached methods
            if (_type != monitoringApi.GetType())
            {
                _useConnection = null;

                _type = monitoringApi.GetType();
            }

            if (_useConnection == null)
            {
                _useConnection = monitoringApi.GetType().GetTypeInfo().GetMethod(nameof(UseConnection),
                                                                                 BindingFlags.NonPublic | BindingFlags.Instance);
            }

            if (_useConnection == null)
            {
                throw new ArgumentException("The function UseConnection cannot be found.");
            }
        }
コード例 #5
0
        public async Task <object> RetryParticipationSyncImmediately(
            CrmData data,
            Configurations requestWideSettings,
            bool requestConsumerId = false)
        {
            var jobId = await Task.Run(() => BackgroundJob.Enqueue <ICrmConsumerProvider>(
                                           iCrmProvider =>
                                           iCrmProvider.CreateParticipationAsync(
                                               data,
                                               requestWideSettings,
                                               requestConsumerId)));

            var             result        = new object();
            IMonitoringApi  monitoringApi = JobStorage.Current.GetMonitoringApi();
            JobDetailsDto   jobDetails    = monitoringApi.JobDetails(jobId);
            SucceededJobDto jobDto        = monitoringApi.SucceededJobs(0, int.MaxValue)
                                            .First()
                                            //.FirstOrDefault(job => job.Key == "Key")
                                            .Value;

            if (jobDto != null)
            {
                result = jobDto.Result;
                return(JsonConvert.DeserializeObject <CrmResponse>(result.ToString()));
            }

            return(null);
        }
コード例 #6
0
        private static int serverCountFromHangfire(IMonitoringApi monitor)
        {
            var       runningServerCount = _retry.Execute(() => monitor.Servers().Count);
            const int startingServer     = 1;

            return(runningServerCount + startingServer);
        }
コード例 #7
0
        internal int DetermineWorkerCount(IMonitoringApi monitor,
                                          StoredConfiguration configuration,
                                          WorkerDeterminerOptions options)
        {
            var goal = configuration.GoalWorkerCount ?? options.DefaultGoalWorkerCount;

            if (goal > options.MaximumGoalWorkerCount)
            {
                goal = options.MaximumGoalWorkerCount;
            }

            var serverCount = _serverCountDeterminer.DetermineServerCount(monitor, options);

            var workerCount = Convert.ToInt32(Math.Ceiling(goal / (decimal)serverCount));

            if (configuration.MaxWorkersPerServer.HasValue)
            {
                if (workerCount > configuration.MaxWorkersPerServer.Value)
                {
                    workerCount = configuration.MaxWorkersPerServer.Value;
                }
            }

            if (workerCount < options.MinimumWorkerCount)
            {
                workerCount = options.MinimumWorkerCount;
            }

            return(workerCount);
        }
コード例 #8
0
        public void GetMonitoringApi_ReturnsNonNullInstance()
        {
            LiteDbStorage  storage = ConnectionUtils.CreateStorage();
            IMonitoringApi api     = storage.GetMonitoringApi();

            Assert.NotNull(api);
        }
コード例 #9
0
        public MySqlTagsMonitoringApi(IMonitoringApi monitoringApi)
        {
            if (monitoringApi.GetType().Name != "MySqlMonitoringApi")
            {
                throw new ArgumentException("The monitor API is not implemented using MySql", nameof(monitoringApi));
            }

            _monitoringApi = monitoringApi;
            // Other transaction type, clear cached methods
            if (_type != monitoringApi.GetType())
            {
                _useConnection = null;

                _type = monitoringApi.GetType();
            }

            if (_useConnection == null)
            {
                _useConnection = monitoringApi.GetType().GetTypeInfo().GetMethod(nameof(UseConnection),
                                                                                 BindingFlags.NonPublic | BindingFlags.Instance);
            }

            if (_useConnection == null)
            {
                throw new ArgumentException("The function UseConnection cannot be found.");
            }
        }
コード例 #10
0
        public SqliteMonitoringApiTests()
        {
            var storage = GetRequiredService <IDataStorage>();

            _monitoring = storage.GetMonitoringApi();
            Initialize(storage);
        }
コード例 #11
0
        public AspNetCoreDashboardContext(
            DashboardOptions options,
            HttpContext httpContext,
            IMonitoringApi storage)
            : base(options, storage)
        {
            if (httpContext == null)
            {
                throw new ArgumentNullException(nameof(httpContext));
            }

            HttpContext = httpContext;
            Request     = new AspNetCoreDashboardRequest(httpContext);
            Response    = new AspNetCoreDashboardResponse(httpContext);

            if (!options.IgnoreAntiforgeryToken)
            {
                var antiforgery = HttpContext.RequestServices.GetService <IAntiforgery>();
                var tokenSet    = antiforgery?.GetAndStoreTokens(HttpContext);

                if (tokenSet != null)
                {
                    AntiforgeryHeader = tokenSet.HeaderName;
                    AntiforgeryToken  = tokenSet.RequestToken;
                }
            }
        }
コード例 #12
0
 public JobManager(JobStorage jobStorage, IBackgroundJobClient backgroundJobClient, IPerformingContextAccessor performingContextAccessor, ILogger <JobManager> logger)
 {
     this.monitoringApi             = jobStorage.GetMonitoringApi();
     this.performingContextAccessor = performingContextAccessor;
     this.logger = logger;
     this.backgroundJobClient = backgroundJobClient;
 }
コード例 #13
0
ファイル: Startup.cs プロジェクト: tanddcoder/SpojDebug
 private static void AppStartBackGroundJob(IAdminSettingService adminservice, IMonitoringApi monitor)
 {
     PurgeJobs(monitor);
     RecurringJob.AddOrUpdate("GetSpojInfo", () => adminservice.GetSpojInfo(), "*/1 * * * *");
     RecurringJob.AddOrUpdate("DownloadSpojTestCases", () => adminservice.DownloadSpojTestCases(), "*/1 * * * *");
     RecurringJob.AddOrUpdate("GetSubmissionInfo", () => adminservice.GetSubmissionInfo(), "*/1 * * * *");
 }
コード例 #14
0
        /// <summary>
        /// Clear previous jobs
        /// </summary>
        private void ClearRecurringJobs()
        {
            try
            {
                using IStorageConnection connection = JobStorage.Current.GetConnection();
                foreach (RecurringJobDto recurringJob in connection.GetRecurringJobs())
                {
                    if (recurringJob != null)
                    {
                        RecurringJob.RemoveIfExists(recurringJob.Id);
                    }
                }

                IMonitoringApi monitoringApi = JobStorage.Current.GetMonitoringApi();
                while (monitoringApi.Servers().Count > 1)
                {
                    var serverToRemove = monitoringApi.Servers().Last();
                    connection.RemoveServer(serverToRemove.Name);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
コード例 #15
0
ファイル: JobQueueClient.cs プロジェクト: Kiphaz/PureActive
 /// <summary>
 ///     Constructor.
 /// </summary>
 public JobQueueClient(
     IBackgroundJobClient backgroundJobClient,
     JobStorage jobStorage)
 {
     _backgroundJobClient = backgroundJobClient;
     _monitoringApi       = jobStorage.GetMonitoringApi();
 }
コード例 #16
0
        private async Task WaitUntilJobCompletedAsync(string jobId, int maxWaitInMilliseconds = 5000)
        {
            IMonitoringApi monitoringApi = JobStorage.Current.GetMonitoringApi();

            var           sw         = Stopwatch.StartNew();
            JobDetailsDto jobDetails = null;

            while ((jobDetails == null || jobDetails.History.All(s => s.StateName != "Succeeded")) && (sw.Elapsed.TotalMilliseconds < maxWaitInMilliseconds || Debugger.IsAttached))
            {
                await Task.Delay(25);

                jobDetails = monitoringApi.JobDetails(jobId);
                if (monitoringApi.FailedCount() > 0)
                {
                    break;
                }
            }

            FailedJobDto failedJob = monitoringApi
                                     .FailedJobs(0, int.MaxValue)
                                     .Select(j => j.Value)
                                     .FirstOrDefault();

            if (failedJob != null)
            {
                throw new InvalidOperationException($"Job failed: {failedJob.ExceptionDetails}.");
            }

            _client.Delete(jobId);
        }
 /// <summary>
 /// Ctor initializing HangFire monitoring API object
 /// </summary>
 public HangFireHealthCheck(ILogger <HangFireHealthCheck> logger, IHealthCheckHangFireService healthCheckHangFireService, AppSettingsConfig appSettingsConfig)
 {
     _logger = logger;
     _hangFireMonitoringApi      = healthCheckHangFireService.GetHangFireMonitoringApi();
     _healthCheckHangFireService = healthCheckHangFireService;
     _appSettingsConfig          = appSettingsConfig;
 }
コード例 #18
0
        public static void PurgeOrfanJobsExceptList(this IMonitoringApi monitor, List <string> exceptions)
        {
            var toDelete = new List <string>();

            foreach (QueueWithTopEnqueuedJobsDto queue in monitor.Queues())
            {
                for (var i = 0; i < Math.Ceiling(queue.Length / 1000d); i++)
                {
                    monitor.EnqueuedJobs(queue.Name, 1000 * i, 1000)
                    .ForEach(x =>
                    {
                        if (!exceptions.Contains(x.Key))
                        {
                            toDelete.Add(x.Key);
                        }
                        else
                        {
                            Console.WriteLine("x.Key " + x.Key + "  remains.");
                        }
                    }
                             );
                }
            }

            foreach (var jobId in toDelete)
            {
                BackgroundJob.Delete(jobId);
            }
        }
コード例 #19
0
        public RedisTagsMonitoringApi(IMonitoringApi monitoringApi, RedisStorageOptions options)
        {
            if (monitoringApi.GetType().Name != "RedisMonitoringApi")
            {
                throw new ArgumentException("The monitor API is not implemented using Redis", nameof(monitoringApi));
            }
            _monitoringApi = monitoringApi;

            // Dirty, but lazy...we would like to execute these commands in the same transaction, so we're resorting to reflection for now

            var databaseFactory = monitoringApi.GetType().GetTypeInfo().GetField("_databaseFactory",
                                                                                 BindingFlags.NonPublic | BindingFlags.Instance);

            if (databaseFactory == null)
            {
                throw new ArgumentException("The field _databaseFactory cannot be found.");
            }

            var getJobsWithPropertiesMethod = monitoringApi.GetType()
                                              .GetMethod("GetJobsWithProperties", BindingFlags.Instance | BindingFlags.NonPublic);

            if (getJobsWithPropertiesMethod == null)
            {
                throw new ArgumentException("The method GetJobsWithPropertiesMethod cannot be found.");
            }

            _getJobsWithPropertiesMethod = getJobsWithPropertiesMethod.MakeGenericMethod(typeof(MatchingJobDto));

            var factory    = (Func <object>)databaseFactory.GetValue(monitoringApi);
            var objFactory = factory.Invoke();

            _wrapper = new DatabaseWrapper(objFactory, options);
        }
コード例 #20
0
 public void GetMonitoringApi_ReturnsNonNullInstance()
 {
     UseStorage(storage =>
     {
         IMonitoringApi api = storage.GetMonitoringApi();
         Assert.NotNull(api);
     });
 }
コード例 #21
0
        public IActionResult GetStorage(string jobId)
        {
            IMonitoringApi jobMonitoringApi = JobStorage.Current.GetMonitoringApi();
            //var jobMonitoringApi = JobStorage.Current.GetConnection();
            var job = jobMonitoringApi.FailedJobs(0, int.MaxValue);

            return(Ok());
        }
コード例 #22
0
ファイル: JobQueueClient.cs プロジェクト: JXQJ/PureActive
        /// <summary>
        /// Removes all recurring jobs from queue
        /// </summary>
        public static void DeleteAllEnqueuedJobs(IMonitoringApi monitoringApi, string queue = "default")
        {
            var enqueuedJobs = monitoringApi.EnqueuedJobs(queue, 0, Int32.MaxValue).ToList();

            foreach (var enqueuedJob in enqueuedJobs)
            {
                BackgroundJob.Delete(enqueuedJob.Key);
            }
        }
コード例 #23
0
 protected DashboardContext(DashboardOptions options, IMonitoringApi storage)
 {
     if (options == null)
     {
         throw new ArgumentNullException(nameof(options));
     }
     Options         = options;
     _isReadOnlyLazy = new Lazy <bool>(() => options.IsReadOnlyFunc(this));
     Storage         = storage;
 }
コード例 #24
0
ファイル: ReceivedPage.cs プロジェクト: zche/CAP-2.3.0
        public int GetTotal(IMonitoringApi api)
        {
            if (string.Equals(StatusName, Infrastructure.StatusName.Succeeded,
                              StringComparison.CurrentCultureIgnoreCase))
            {
                return(api.ReceivedSucceededCount());
            }

            return(api.ReceivedFailedCount());
        }
コード例 #25
0
ファイル: PublishedPage.cs プロジェクト: 5l1v3r1/CAP-1
        public int GetTotal(IMonitoringApi api)
        {
            if (string.Equals(Name, nameof(Internal.StatusName.Succeeded),
                              StringComparison.CurrentCultureIgnoreCase))
            {
                return(api.PublishedSucceededCount());
            }

            return(api.PublishedFailedCount());
        }
コード例 #26
0
ファイル: BuildsController.cs プロジェクト: tucpmjc/DscDemo
 /// <summary>
 /// Initializes a new instance of the <see cref="BuildsController"/> class.
 /// </summary>
 /// <param name="context">
 /// The context.
 /// </param>
 /// <param name="monitoringApi">
 /// The monitoring api.
 /// </param>
 /// <param name="service">
 /// The service.
 /// </param>
 public BuildsController(
     DeploymentServerContext context,
     IMonitoringApi monitoringApi,
     IMofBuilderService service)
 {
     this.Context                = context;
     this.MonitoringApi          = monitoringApi;
     this.BuildRepository        = context.Set <Build>();
     this.BuildTargetsRepository = context.Set <BuildTarget>();
     this.MofBuilderService      = service;
 }
コード例 #27
0
        public static void CancelAllJobs()
        {
            IMonitoringApi             mon            = JobStorage.Current.GetMonitoringApi();
            JobList <ProcessingJobDto> processingJobs = mon.ProcessingJobs(0, int.MaxValue);

            foreach (KeyValuePair <string, ProcessingJobDto> job in processingJobs)
            {
                BackgroundJob.Delete(job.Key);
                LogHelper.Logger.Info($"Deleted Job {job.Key}");
            }
        }
コード例 #28
0
 private int readServerCount(IMonitoringApi monitor, WorkerDeterminerOptions options)
 {
     if (options.UseServerCountSampling)
     {
         var serverCount = serverCountFromSamples();
         if (serverCount.HasValue)
         {
             return(serverCount.Value);
         }
     }
     return(serverCountFromHangfire(monitor));
 }
コード例 #29
0
        public int DetermineServerCount(IMonitoringApi monitor, WorkerDeterminerOptions options)
        {
            var serverCount = readServerCount(monitor, options);

            if (options.MinimumServerCount.HasValue)
            {
                if (serverCount < options.MinimumServerCount)
                {
                    return(options.MinimumServerCount.Value);
                }
            }

            return(serverCount);
        }
コード例 #30
0
ファイル: JobQueueClient.cs プロジェクト: Kiphaz/PureActive
        /// <summary>
        ///     Returns the status of the job with the given ID.
        /// </summary>
        public static Task <JobStatus> GetJobStatusAsync(IMonitoringApi monitoringApi, string jobId)
        {
            // TODO: Make this actually asynchronous once HangFire supports it.

            var jobDetails = monitoringApi.JobDetails(jobId)
                             .History
                             .OrderByDescending(h => h.CreatedAt)
                             .FirstOrDefault();

            var jobState     = GetJobState(jobDetails);
            var enteredState = jobDetails?.CreatedAt ?? DateTime.MinValue;

            return(Task.FromResult(new JobStatus(jobState, enteredState)));
        }