Esempio n. 1
0
        public void Execute(CancellationToken cancellationToken)
        {
            Logger.DebugFormat("Aggregating records in 'Counter' table...");

            int removedCount = 0;

            do
            {
                _storage.UseConnection(connection =>
                {
                    removedCount = connection.Execute(
                        GetAggregationQuery(),
                        new { now = DateTime.UtcNow, count = NumberOfRecordsInSinglePass });
                });

                if (removedCount >= NumberOfRecordsInSinglePass)
                {
                    cancellationToken.WaitHandle.WaitOne(DelayBetweenPasses);
                    cancellationToken.ThrowIfCancellationRequested();
                }
            } while (removedCount >= NumberOfRecordsInSinglePass);

            cancellationToken.WaitHandle.WaitOne(_interval);
        }
        public override string CreateExpiredJob(Job job, IDictionary <string, string> parameters, DateTime createdAt, TimeSpan expireIn)
        {
            if (job == null)
            {
                throw new ArgumentNullException(nameof(job));
            }

            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            var invocationData = InvocationData.SerializeJob(job);

            invocationData.Arguments = null;
            var arguments = InvocationData.SerializeJob(job);

            Logger.TraceFormat("CreateExpiredJob={0}", SerializationHelper.Serialize(invocationData, SerializationOption.User));

            return(_storage.UseConnection(connection =>
            {
                var jobId = connection.GetNextJobId();

                var oracleDynamicParameters = new OracleDynamicParameters();
                oracleDynamicParameters.AddDynamicParams(new
                {
                    ID = jobId,
                    CREATED_AT = createdAt,
                    EXPIRE_AT = createdAt.Add(expireIn)
                });
                oracleDynamicParameters.Add("INVOCATION_DATA", SerializationHelper.Serialize(invocationData, SerializationOption.User), OracleMappingType.NClob, ParameterDirection.Input);
                oracleDynamicParameters.Add("ARGUMENTS", arguments.Arguments, OracleMappingType.NClob, ParameterDirection.Input);

                connection.Execute(
                    @" 
 INSERT INTO HF_JOB (ID, INVOCATION_DATA, ARGUMENTS, CREATED_AT, EXPIRE_AT) 
      VALUES (:ID, :INVOCATION_DATA, :ARGUMENTS, :CREATED_AT, :EXPIRE_AT)
",
                    oracleDynamicParameters);

                if (parameters.Count > 0)
                {
                    var parameterArray = new object[parameters.Count];
                    var parameterIndex = 0;
                    foreach (var parameter in parameters)
                    {
                        var dynamicParameters = new OracleDynamicParameters();
                        dynamicParameters.AddDynamicParams(new
                        {
                            JOB_ID = jobId,
                            NAME = parameter.Key
                        });
                        dynamicParameters.Add("VALUE", parameter.Value, OracleMappingType.NClob, ParameterDirection.Input);

                        parameterArray[parameterIndex++] = dynamicParameters;
                    }

                    connection.Execute(@"INSERT INTO HF_JOB_PARAMETER (ID, NAME, VALUE, JOB_ID) VALUES (HF_SEQUENCE.NEXTVAL, :NAME, :VALUE, :JOB_ID)", parameterArray);
                }

                return jobId.ToString();
            }));
        }
Esempio n. 3
0
        public override string CreateExpiredJob(Job job, IDictionary <string, string> parameters, DateTime createdAt, TimeSpan expireIn)
        {
            if (job == null)
            {
                throw new ArgumentNullException("job");
            }
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            var invocationData = InvocationData.Serialize(job);

            Logger.TraceFormat("CreateExpiredJob={0}", JobHelper.ToJson(invocationData));

            return(_storage.UseConnection(connection =>
            {
                var param = new DynamicParameters();
                param.Add("invocationData", JobHelper.ToJson(invocationData), direction: System.Data.ParameterDirection.Input);
                param.Add("arguments", invocationData.Arguments, direction: System.Data.ParameterDirection.Input);
                param.Add("createdAt", createdAt, direction: System.Data.ParameterDirection.Input);
                param.Add("expireAt", createdAt.Add(expireIn), direction: System.Data.ParameterDirection.Input);
                param.Add("jobId", dbType: System.Data.DbType.Int32, direction: System.Data.ParameterDirection.Output);

                connection.Execute(
                    "insert into HANGFIRE_JOB (InvocationData, Arguments, CreatedAt, ExpireAt) " +
                    "values (:invocationData, :arguments, :createdAt, :expireAt) returning ID into :jobId",
                    param);

                var jobId = param.Get <int>("jobId").ToString();
                //string jobId = id.ToString();

                if (parameters.Count > 0)
                {
                    var parameterArray = new object[parameters.Count];
                    int parameterIndex = 0;
                    foreach (var parameter in parameters)
                    {
                        parameterArray[parameterIndex++] = new
                        {
                            jobId = jobId,
                            name = parameter.Key,
                            value = parameter.Value
                        };
                    }

                    connection.Execute(
                        "insert into HANGFIRE_JOBParameter (JobId, Name, Value) values (:jobId, :name, :value)",
                        parameterArray);
                }

                return jobId;
            }));
        }