예제 #1
0
        public void Converter_CheckIsMethodRegistered_ShouldPass()
        {
            var request =
                new ConvertionRequest <ConverterTests>(
                    "repeat every 5 seconds where TestA(@current) and TestB(@current) start at '06.06.2016 14:00:00'",
                    TimeZoneInfo.Local, TimeZoneInfo.Local, false, null);

            var timeline = new RdlTimeline <ConverterTests>(false);

            var response = timeline.Convert(request);

            response.Output.NextFire();

            Assert.IsTrue(_testACalled);
            Assert.IsTrue(_testBCalled);
        }
예제 #2
0
        private void TestMethods <TMethods>(string query, string fireTime) where TMethods : new()
        {
            var request = new ConvertionRequest <TMethods>(query, TimeZoneInfo.Local, TimeZoneInfo.Local, false, new[]
            {
                "dd.M.yyyy",
                "dd.M.yyyy hh:mm:ss"
            });

            var timeline = new RdlTimeline <TMethods>(false);
            var response = timeline.Convert(request);

            Assert.IsNotNull(response.Output);

            var fireAt = response.Output.NextFire();

            Assert.AreEqual(DateTimeOffset.Parse(fireTime), fireAt.Value);
        }
예제 #3
0
        public static ConvertionResponse <IFireTimeEvaluator> Convert <TMethodsAggregator>(string query, TimeZoneInfo source, TimeZoneInfo destination, CancellationToken cancellationToken = default(CancellationToken))
            where TMethodsAggregator : new()
        {
            var request
                = new ConvertionRequest <TMethodsAggregator>(query, source, destination, false, new[]
            {
                "dd/M/yyyy H:m:s",
                "dd/M/yyyy h:m:s tt",
                "dd.M.yyyy H:m:s",
                "dd.M.yyyy h:m:s tt",
                "yyyy-mm.dd HH:mm:ss",
                "yyyy/mm/dd H:m:s",
                "dd.M.yyyy"
            }, cancellationToken);

            var timeline = new RdlTimeline <TMethodsAggregator>(false);

            var response = timeline.Convert(request);

            return(response);
        }
예제 #4
0
        static void Main(string[] args)
        {
            args = new[] { @"
                repeat every minutes where 1 = 
                    (case 
                        when GetWeekOfMonth() in (1,3) and GetDayOfWeek() = monday
                        then GetTime() between Time(8, 30, 0) and Time(11, 30, 0)
                        when GetWeekOfMonth() in (2,4) and GetDayOfWeek() in (tuesday, sunday)
                        then GetTime() = Time(12, 0, 0)
                        else 0
                    esac) start at '01.04.2017' stop at '30.04.2019'" };

            Console.WriteLine($@"Timer started at: {DateTimeOffset.UtcNow}");

            Stopwatch queryTimer = new Stopwatch();

            queryTimer.Start();
            var converter = new RdlTimeline <DefaultMethodsAggregator>();
            var response  = converter.Convert(new ConvertionRequest <DefaultMethodsAggregator>(args[0], TimeZoneInfo.Local, TimeZoneInfo.Local));
            var evaluator = response.Output;

            var lastElapsed = queryTimer.ElapsedMilliseconds;

            while (evaluator.NextFire() != null)
            {
                if (queryTimer.ElapsedMilliseconds - lastElapsed > 1000)
                {
                    Console.WriteLine($@"Timer started at: {DateTimeOffset.UtcNow}");
                    lastElapsed = queryTimer.ElapsedMilliseconds;
                }
            }

            queryTimer.Stop();

            Console.WriteLine($@"Timer stopped: {queryTimer.Elapsed}");
        }