Esempio n. 1
0
        // @TODO: Does this really belong in here?
        public Task <ArgosResult> GetState(string id)
        {
            ArgosResult rs = _state.ContainsKey(id)
                ? _state[id]
                : null;

            return(Task.FromResult(rs));
        }
Esempio n. 2
0
        /// <summary>
        /// Compare two ArgosResults
        /// </summary>
        /// <param name="lhs"></param>
        /// <param name="rhs"></param>
        /// <returns>true if lhs and rhs are equal</returns>
        public static bool IsEqual(ArgosResult lhs, ArgosResult rhs)
        {
            if (lhs == null || rhs == null)
            {
                return(false);
            }

            return(lhs.ArgosId == rhs.ArgosId &&
                   IsEqual(lhs.Items, rhs.Items));
        }
Esempio n. 3
0
        public Task <ArgosResult> RunAsync()
        {
            try
            {
                // Clean up finished items
                _items.RemoveAll(x => x.Output.IntValue("stage") == 5);

                // Update all items
                foreach (var item in State)
                {
                    Update(item);
                }

                // Generate new itemsjj
                if (!_items.Any() /* || _rnd.NextDouble() < 0.3*/)
                {
                    CreateNewbie(_definition);
                }
            }
            catch (Exception ex)
            {
            }
            finally
            {
                _lastRunUtc = DateTime.UtcNow;
            }

            var result = new ArgosResult();

            result.ArgosId = Id;

            // Return a copy not our actual items...
            //result.Items = State.Select(i => i.Copy()).ToList();
            result.Items = State.ToList();

            return(Task.FromResult(result));
        }
Esempio n. 4
0
        /// <summary>
        /// Return results of Argos instances have been updated
        /// </summary>
        /// <returns></returns>
        public async Task <IEnumerable <ArgosResult> > RunAsync()
        {
            var items = new List <ArgosResult>();

            foreach (var instance in Instances.Where(a => a.IsDue))
            {
                try
                {
                    //Log.Debug("Running {type} - {name}", instance.GetType().Name, instance.Id);

                    // Run instance
                    var result = await instance.RunAsync();

                    await _stateProcessor.ProcessAsync(instance.Definition, result.Items);

                    await _ruleProcessor.ProcessAsync(instance.Definition, result.Items);

                    // Check if state has changed since last time
                    ArgosResult previous = null;
                    if (_state.ContainsKey(instance.Id))
                    {
                        previous = _state[instance.Id];
                    }

                    if (!Compare.IsEqual(result, previous))
                    {
                        items.Add(result);

                        // #hack: dump result
                        Log.Debug(result.ToString());
                    }

                    _state[instance.Id] = result.Copy();
                }
                catch (Exception ex)
                {
                    Log.Error(ex, ex.Message);
                }
            }

            #region original
            //// Get any argos definitions who's heartbeat is due
            //foreach (var definition in GetDue())
            //         {
            //	try
            //	{
            //                 ArgosResult lastRun;
            //                 if (_state.ContainsKey(definition.Id))
            //                 {
            //                     lastRun = _state[definition.Id];
            //                 }
            //                 else
            //                 {
            //                     lastRun = new ArgosResult();
            //                     _state.Add(definition.Id, lastRun);
            //                 }

            //                 var argos = _argos.Single(t => t.GetType().Name == definition.Type);

            //		//Validate(testdefinition, test.Meta);
            //		Log.Debug("Running {type} - {name}", argos.GetType().Name, definition.Id);

            //		var rs = await argos.RunAsync(definition);

            //		foreach(var item in rs.Items)
            //		{
            //			await _stateProcessor.ProcessAsync(definition, item);
            //			await _ruleProcessor.ProcessAsync(definition, item);
            //		}

            //                 if (!Compare.ArgosResultsAreEqual(rs, lastRun))
            //                 {
            //                     //Log.Information("{argos} '{id}' Has changed: " + rs,
            //                     //    argos.GetType().Name,
            //                     //    definition.Id);

            //                     items.Add(rs);
            //                 }

            //                 _state[definition.Id] = rs;
            //             }
            //             catch (Exception ex)
            //             {
            //                 Log.Error(ex, ex.Message);
            //             }
            //         }
            #endregion

            return(items);
        }