Пример #1
0
        public override void Start()
        {
            DeserializationFilter deserializationFilter = new DeserializationFilter();

            deserializationFilter.UseLegacyCollection = this.IsLegacyCollection;
            ServiceMapFilter      serviceMapFilter      = new ServiceMapFilter(this);
            WsdlFilter            wsdlFilter            = new WsdlFilter();
            ContextFilter         contextFilter         = new ContextFilter(this);
            AuthenticationFilter  authenticationFilter  = new AuthenticationFilter(this);
            DescribeServiceFilter describeServiceFilter = new DescribeServiceFilter();
            //CacheFilter cacheFilter = new CacheFilter();
            ProcessFilter       processFilter       = new ProcessFilter(this);
            MessageFilter       messageFilter       = new MessageFilter(this);
            DebugFilter         debugFilter         = new DebugFilter();
            SerializationFilter serializationFilter = new SerializationFilter();

            serializationFilter.UseLegacyCollection = this.IsLegacyCollection;
            serializationFilter.UseLegacyThrowable  = this.IsLegacyThrowable;

            deserializationFilter.Next = serviceMapFilter;
            serviceMapFilter.Next      = wsdlFilter;
            wsdlFilter.Next            = contextFilter;
            contextFilter.Next         = authenticationFilter;
            authenticationFilter.Next  = describeServiceFilter;
            describeServiceFilter.Next = processFilter;
            //describeServiceFilter.Next = cacheFilter;
            //cacheFilter.Next = processFilter;
            processFilter.Next = debugFilter;
            debugFilter.Next   = messageFilter;
            messageFilter.Next = serializationFilter;

            _filterChain = new FilterChain(deserializationFilter);
        }
Пример #2
0
 public Task <ActionResult <ProcessModel> > GetProcess(
     ProcessFilter processFilter)
 {
     return(InvokeForProcess <ProcessModel>(
                processInfo => ProcessModel.FromProcessInfo(processInfo),
                processFilter));
 }
Пример #3
0
        public override void Start()
        {
            DeserializationFilter filter = new DeserializationFilter {
                UseLegacyCollection = this.GetIsLegacyCollection()
            };
            ServiceMapFilter      filter2 = new ServiceMapFilter(this);
            WsdlFilter            filter3 = new WsdlFilter();
            AuthenticationFilter  filter4 = new AuthenticationFilter(this);
            DescribeServiceFilter filter5 = new DescribeServiceFilter();
            ProcessFilter         filter6 = new ProcessFilter(this);
            MessageFilter         filter7 = new MessageFilter(this);
            DebugFilter           filter8 = new DebugFilter();
            SerializationFilter   filter9 = new SerializationFilter {
                UseLegacyCollection = this.GetIsLegacyCollection()
            };

            filter.Next       = filter2;
            filter2.Next      = filter3;
            filter3.Next      = filter4;
            filter4.Next      = filter5;
            filter5.Next      = filter6;
            filter6.Next      = filter8;
            filter8.Next      = filter7;
            filter7.Next      = filter9;
            this._filterChain = new FilterChain(filter);
        }
Пример #4
0
        private string BuildUserQueryClause(ProcessFilter filter, bool needsCreate, bool needsLastChange)
        {
            var queryBuilder = new StringBuilder();

            queryBuilder.AppendLine("SELECT DISTINCT P.[PROCESS_ID] AS ProcessId");
            queryBuilder.AppendLine("FROM RAA.dbo.PROCESS P");
            queryBuilder.AppendLine("INNER JOIN (SELECT DEFN_PROCESS_ID FROM RAA.dbo.DEFN_PROCESS WHERE DOC_TYPE_NAME IN @docTypeList) D on P.DEFN_PROCESS_ID = D.DEFN_PROCESS_ID");

            if (NeedsCriteria(filter.ActorIdList))
            {
                queryBuilder.AppendLine("INNER JOIN (");
                queryBuilder.AppendLine("    SELECT PROCESS_ID");
                queryBuilder.AppendLine("    FROM ACTOR ACT");
                queryBuilder.AppendLine("    INNER JOIN ACTIVITY A ON ACT.ACTIVITY_ID = A.ACTIVITY_ID");
                if (NeedsCriteria(filter.ActivityStateList))
                {
                    queryBuilder.AppendLine("    AND STATE IN @activityStateList");
                }
                queryBuilder.AppendLine("    WHERE ACT.HANFORD_ID IN @actorList");
                queryBuilder.AppendLine("    ) R ON P.PROCESS_ID = R.PROCESS_ID");
            }

            if (NeedsCriteria(filter.OriginatorIdList) || NeedsCriteria(filter.BeneficiaryIdList) || needsCreate || needsLastChange || NeedsCriteria(filter.ProcessStateList))
            {
                queryBuilder.AppendLine("        WHERE ");

                List <string> clauses = new List <string>();

                if (NeedsCriteria(filter.ProcessStateList))
                {
                    clauses.Add("P.STATE in @processStateList");
                }

                if (NeedsCriteria(filter.OriginatorIdList))
                {
                    clauses.Add("P.DOC_ORIGINATOR_ID in @originatorId");
                }

                if (NeedsCriteria(filter.BeneficiaryIdList))
                {
                    clauses.Add("P.DOC_BENEFICIARY_ID in @beneficiaryId");
                }

                if (needsCreate)
                {
                    clauses.Add("P.CREATE_DATETIME between @createStart and @createEnd");
                }

                if (needsLastChange)
                {
                    clauses.Add("P.LAST_CHANGE_DATETIME between @lastChangeStart and @lastChangeEnd");
                }

                queryBuilder.Append(string.Join(" AND ", clauses));
            }

            return(queryBuilder.ToString());
        }
Пример #5
0
        public void ContainsWithSinglePattern()
        {
            ProcessFilter f = new ProcessFilter("session");

            Assert.AreEqual(true, f.Contains("RBCWSSession"));
            Assert.AreEqual(true, f.Contains("some session server"));
            Assert.AreEqual(false, f.Contains("Quake"));
            Assert.AreEqual(false, f.Contains(""));
        }
Пример #6
0
        private void ProcessTerminatedHandler(IRunningProcess aProcess)
        {
            if (!ProcessFilter.ForInvalidProcesses(_platformBits).IsValid(aProcess))
            {
                return;
            }

            RemoveRunningProcess(aProcess);
            RemoveProcessHooks(aProcess);
        }
Пример #7
0
        public void ContainsWithMultiplePatterns()
        {
            ProcessFilter f = new ProcessFilter("Session,UserInfo");

            Assert.AreEqual(true, f.Contains("RBCWSUserInfo"));
            Assert.AreEqual(true, f.Contains("Some Session Server"));
            Assert.AreEqual(true, f.Contains("Some Userinfo App"));
            Assert.AreEqual(false, f.Contains("Quake"));
            Assert.AreEqual(false, f.Contains(""));
        }
Пример #8
0
 private List <string> BuildTypeList(ProcessFilter processFilter)
 {
     if (processFilter.DocumentTypeList != null && processFilter.DocumentTypeList.Count > 0)
     {
         return(processFilter.DocumentTypeList);
     }
     else
     {
         return(null);
     }
 }
Пример #9
0
        public Task <ActionResult <ProcessModel> > GetProcess(
            ProcessFilter processFilter)
        {
            return(this.InvokeService <ProcessModel>(async() =>
            {
                IProcessInfo processInfo = await _diagnosticServices.GetProcessAsync(
                    processFilter,
                    HttpContext.RequestAborted);

                return ProcessModel.FromProcessInfo(processInfo);
            }));
        }
Пример #10
0
        public Task <ActionResult <ProcessModel> > GetProcess(
            ProcessFilter processFilter)
        {
            return(InvokeForProcess <ProcessModel>(processInfo =>
            {
                ProcessModel processModel = ProcessModel.FromProcessInfo(processInfo);

                _logger.WrittenToHttpStream();

                return processModel;
            },
                                                   processFilter));
        }
Пример #11
0
        private DynamicParameters BuildOriginatorParameters(ProcessFilter processFilter, IList <string> activityStateList, IList <string> processStateList, IList <string> typeList, IList <string> originatorList, IList <string> beneficiaryList)
        {
            DynamicParameters parameters = new DynamicParameters();

            if (NeedsCriteria(processFilter.ActorIdList))
            {
                parameters.Add("actorList", processFilter.ActorIdList);
            }

            if (NeedsCriteria(processFilter.DocumentTypeList))
            {
                parameters.Add("docTypeList", processFilter.DocumentTypeList);
            }

            if (activityStateList != null)
            {
                parameters.Add("activityStateList", activityStateList);
            }

            if (processStateList != null)
            {
                parameters.Add("processStateList", processStateList);
            }

            if (originatorList != null)
            {
                parameters.Add("originatorId", originatorList);
            }

            if (beneficiaryList != null)
            {
                parameters.Add("beneficiaryId", beneficiaryList);
            }

            if (processFilter.CreateDateRange != null)
            {
                parameters.Add("createStart", processFilter.CreateDateRange.Start);
                parameters.Add("createEnd", processFilter.CreateDateRange.End);
            }

            if (processFilter.CreateDateRange != null)
            {
                parameters.Add("lastChangeStart", processFilter.LastChangeDateRange.Start);
                parameters.Add("lastChangeEnd", processFilter.LastChangeDateRange.End);
            }

            return(parameters);
        }
Пример #12
0
        private List <string> BuildActivityStateList(ProcessFilter processFilter)
        {
            List <string> stateList = null;

            if (processFilter.ActivityStateList != null && processFilter.ActivityStateList.Count > 0)
            {
                stateList = new List <string>();

                foreach (ActivityState state in processFilter.ActivityStateList)
                {
                    stateList.Add(state.Name);
                }
            }

            return(stateList);
        }
Пример #13
0
        private void DisplayRunningProcesses()
        {
            var processes = _spyManager.RunningProcesses();

            processes = ProcessFilter.ForInvalidProcesses(_platformBits).Filter(processes);

            var clasifier = new ProcessClasifier();

            clasifier.Categorize(processes.Cast <IProcess>());

            _view.DisplayRunningProcesses(
                clasifier.ToHookOnStart.ToArray(),
                clasifier.UnHooked.ToArray(),
                clasifier.HookedInactive.ToArray(),
                clasifier.HookedActive.ToArray());
        }
Пример #14
0
        private void ProcessStartedHandler(IRunningProcess aProcess)
        {
            if (!ProcessFilter.ForInvalidProcesses(_platformBits).IsValid(aProcess))
            {
                return;
            }

            _view.DisplayNewRunningProcess(aProcess);
            _view.RemoveProcessToBeHookedOnStart(aProcess);

            UpdateProcessToSelectionIfItsGroupIsSelected(aProcess);

            DisplaySelectedProcessesModulesIfWasAdded(aProcess);

            _hookLoader.LoadHooksOn(new [] { aProcess });
        }
Пример #15
0
        private List <string> BuildProcessStateList(ProcessFilter processFilter)
        {
            List <string> processStateList = null;

            if (processFilter.ProcessStateList != null && processFilter.ProcessStateList.Count > 0)
            {
                processStateList = new List <string>();

                foreach (ProcessState state in processFilter.ProcessStateList)
                {
                    processStateList.Add(state.Name);
                }
            }

            return(processStateList);
        }
Пример #16
0
        public void ImportHookingSettings(Stream exportedHookingSettings)
        {
            try
            {
                var importedSettings = HookingSettings.FromXml(exportedHookingSettings);
                _hookingSettings.AddRulesFrom(importedSettings);
            }
            catch
            {
                _view.ShowError("Cannot import hooking settings. The file is invalid.");
                return;
            }

            var processes = ProcessFilter.ForInvalidProcesses(_platformBits).Filter(_spyManager.RunningProcesses());

            _hookLoader.LoadHooksOn(processes);
        }
Пример #17
0
        private static DynamicParameters BuildActorParameters(ProcessFilter processFilter, IList <string> activityStateList, IList <string> processStateList, IList <string> typeList, IList <string> originatorList, IList <string> beneficiaryList)
        {
            DynamicParameters parameters = new DynamicParameters();

            // only required field
            parameters.Add("actorHanfordId", processFilter.ActorIdList[0]);

            if (typeList != null)
            {
                parameters.Add("docTypeList", typeList.ToArray());
            }

            if (activityStateList != null)
            {
                parameters.Add("activityStateList", activityStateList);
            }

            if (processStateList != null)
            {
                parameters.Add("processStateList", processStateList);
            }

            if (originatorList != null)
            {
                parameters.Add("originatorId", originatorList);
            }

            if (beneficiaryList != null)
            {
                parameters.Add("beneficiaryId", beneficiaryList);
            }

            if (processFilter.CreateDateRange != null)
            {
                parameters.Add("createStart", processFilter.CreateDateRange.Start);
                parameters.Add("createEnd", processFilter.CreateDateRange.End);
            }

            if (processFilter.CreateDateRange != null)
            {
                parameters.Add("lastChangeStart", processFilter.LastChangeDateRange.Start);
                parameters.Add("lastChangeEnd", processFilter.LastChangeDateRange.End);
            }

            return(parameters);
        }
Пример #18
0
        public Task <ActionResult <Dictionary <string, string> > > GetProcessEnvironment(
            ProcessFilter processFilter)
        {
            return(InvokeForProcess <Dictionary <string, string> >(processInfo =>
            {
                var client = new DiagnosticsClient(processInfo.EndpointInfo.Endpoint);

                try
                {
                    return client.GetProcessEnvironment();
                }
                catch (ServerErrorException)
                {
                    throw new InvalidOperationException("Unable to get process environment.");
                }
            },
                                                                   processFilter));
        }
Пример #19
0
        public Task <ActionResult <Dictionary <string, string> > > GetProcessEnvironment(
            ProcessFilter processFilter)
        {
            return(this.InvokeService <Dictionary <string, string> >(async() =>
            {
                IProcessInfo processInfo = await _diagnosticServices.GetProcessAsync(
                    processFilter,
                    HttpContext.RequestAborted);

                try
                {
                    return processInfo.Client.GetProcessEnvironment();
                }
                catch (ServerErrorException)
                {
                    throw new InvalidOperationException("Unable to get process environment.");
                }
            }));
        }
Пример #20
0
        public override void Start()
        {
            DeserializationFilter deserializationFilter = new DeserializationFilter();

            deserializationFilter.UseLegacyCollection = GetIsLegacyCollection();
            ServiceMapFilter    serviceMapFilter    = new ServiceMapFilter(this);
            ProcessFilter       processFilter       = new ProcessFilter(this);
            MessageFilter       messageFilter       = new MessageFilter(this);
            SerializationFilter serializationFilter = new SerializationFilter();

            serializationFilter.UseLegacyCollection = GetIsLegacyCollection();

            deserializationFilter.Next = serviceMapFilter;
            serviceMapFilter.Next      = processFilter;
            processFilter.Next         = messageFilter;
            messageFilter.Next         = serializationFilter;

            _filterChain = new FilterChain(deserializationFilter);
        }
Пример #21
0
        public async Task SearchAsync_ReturnsValidRequest_GivenValidLimit()
        {
            ProcessFilter validFilter = new ProcessFilter();
            int           validLimit  = 1;
            int           validOffset = 0;

            List <Process> returnList = new List <Process>
            {
                new Process()
                {
                    ProcessId = 1
                }
            };

            PagedResult <Process> result = new PagedResult <Process>(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>(), returnList);

            _mockProcessFacade // arrange
            .Setup(store => store.SearchAsync(It.IsAny <ProcessFilter>(), It.IsAny <Person>(), It.Is <int?>(s => s == validOffset), It.Is <int?>(s => s == validLimit), It.IsAny <CancellationToken>(), It.IsAny <IDictionary <object, object> >()))
            .ReturnsAsync(result);

            using (var controller = InstanceProcessController(_mockProcessFacade))
            {
                var actual = await controller.FilterAsync(It.IsAny <List <string> >(),
                                                          It.IsAny <List <string> >(),
                                                          It.IsAny <List <string> >(),
                                                          It.IsAny <List <ActorActionTaken> >(),
                                                          It.IsAny <List <string> >(),
                                                          It.IsAny <DateTime?>(),
                                                          It.IsAny <DateTime?>(),
                                                          It.IsAny <int?>(),
                                                          It.IsAny <DateTime?>(),
                                                          It.IsAny <DateTime?>(),
                                                          It.IsAny <int?>(),
                                                          It.IsAny <List <string> >(),
                                                          It.IsAny <List <string> >(),
                                                          validOffset, validLimit); // act

                CommonAsserts(actual, StatusCodes.Status200OK);                     // assert
                var objectResult = actual as ObjectResult;
                Assert.IsNotNull(objectResult?.Value as PagedResult <Process>);
            }
        }
Пример #22
0
        private async Task <List <string> > BuildLOriginatorList(ProcessFilter processFilter)
        {
            List <string> originatorList = null;

            if (processFilter.OriginatorIdList != null && processFilter.OriginatorIdList.Count > 0)
            {
                originatorList = new List <string>();

                foreach (string originator in processFilter.OriginatorIdList)
                {
                    originatorList.Add(originator);

                    var person = await _personIdentificationStore.GetByHanfordIdAsync(originator);

                    originatorList.Add(person.EmployeeId);
                }
            }

            return(originatorList);
        }
Пример #23
0
        private async Task <List <string> > BuildLBeneficiaryList(ProcessFilter processFilter)
        {
            List <string> beneficiaryList = null;

            if (processFilter.BeneficiaryIdList != null && processFilter.BeneficiaryIdList.Count > 0)
            {
                beneficiaryList = new List <string>();

                foreach (string beneficiary in processFilter.BeneficiaryIdList)
                {
                    beneficiaryList.Add(beneficiary);

                    var person = await _personIdentificationStore.GetByHanfordIdAsync(beneficiary);

                    beneficiaryList.Add(person.EmployeeId);
                }
            }

            return(beneficiaryList);
        }
Пример #24
0
        /// <summary>
        /// Asynchronously searches the <see cref="Process"/> store based on the filter criteria with security based on the actor is the user
        /// </summary>
        /// <param name="processFilter">The filter criteria to apply to the result set.</param>
        /// <param name="limit">Maximun number of items that we are going to return per page.</param>
        /// <param name="offset">Number of pages that will be skipped.</param>
        /// <param name="cancellationToken">The optional token to monitor for cancellation requests.</param>
        /// <param name="context">The optional execution context that applies to this operation.</param>
        /// <returns>A dictionary of ChargeCodeInfo objects.</returns>
        public virtual async Task <PagedResult <Process> > SearchWithActorAsync(ProcessFilter processFilter, int offset, int limit, CancellationToken cancellationToken = default(CancellationToken), IDictionary <object, object> context = null)
        {
            cancellationToken.ThrowIfCancellationRequested();

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

            if (offset < 0)
            {
                throw new ArgumentException($"{nameof(offset)} must be a positive integer!");
            }

            if (limit <= 0)
            {
                throw new ArgumentException($"{nameof(limit)} must be a positive integer!");
            }

            return(await OnSearchWithActorAsync(processFilter, offset, limit, cancellationToken, context ?? new Dictionary <object, object>()));
        }
Пример #25
0
        /// <summary>
        /// Asynchronously retrieves a list of <see cref="Process"/>.
        /// </summary>
        /// <param name="processFilter">The filter criteria to apply to the result set.</param>
        /// <param name="limit">Maximun number of items that we are going to return per page.</param>
        /// <param name="offset">Number of pages that will be skipped.</param>
        /// <param name="cancellationToken">The optional token to monitor for cancellation requests.</param>
        /// <param name="context">The optional execution context that applies to this operation.</param>
        /// <returns>A <see cref="Task{TResult}"/> </returns>
        protected override async Task <PagedResult <Process> > OnSearchWithUserAsync(ProcessFilter processFilter, int offset, int limit, CancellationToken cancellationToken = default(CancellationToken), IDictionary <object, object> context = null)
        {
            try
            {
                IList <string> activityStateList = BuildActivityStateList(processFilter);
                IList <string> processStateList  = BuildProcessStateList(processFilter);
                IList <string> typeList          = BuildTypeList(processFilter);
                IList <string> originatorList    = await BuildLOriginatorList(processFilter);

                IList <string> beneficiaryList = await BuildLBeneficiaryList(processFilter);

                string query = BuildUserQueryClause(processFilter, processFilter.CreateDateRange != null, processFilter.LastChangeDateRange != null);

                DynamicParameters parameters = BuildUserParameters(processFilter, activityStateList, processStateList, typeList, originatorList, beneficiaryList);

                return(await ExecuteSearch(offset, limit, context, query, parameters, cancellationToken));
            }
            catch (Exception ex)
            {
                _logger.LogError($"Unable to retrieve process list. Reason: {ex}");
                throw;
            }
        }
Пример #26
0
        public void SmokeTest()
        {
            // Instantiating the objects.
            ILogger logger = new ConsoleLogger();

            SeriesFilter sf = new SeriesFilter();

            sf.AddDesiredSeries("%ProcessorTime",
                                "PlotComPlus.Series.DefaultSeries");
            sf.AddDesiredSeries("PrivateBytes",
                                "PlotComPlus.Series.MemorySeries");

            IProcessFilter pf = new ProcessFilter("session,userinfo");

            LogParser parser = new LogParser(pf, sf, logger);

            // Setting up the test log file.
            string path = Path.GetTempFileName();

            string[] content = new string[] {
                "Microsoft (R) Windows Script Host Version 5.6",
                "Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.",
                "",
                "Time,CN,PN(ID),%ProcessorTime,%UT,TC,PrivateBytes,WS",
                "4/3/2007 10:00:37 AM,.,Idle(0),100,0,8,0,16384",
                "4/3/2007 10:00:37 AM,.,System(4),0,0,110,28672,28672",
                "4/3/2007 10:00:37 AM,.,RBCWSSession(6520),23,0,31,30208000,37974016",
                ",,,,,,,",
                "4/3/2007 10:00:42 AM,.,RBCWSSession(6520),24,0,31,25071616,34078720",
                "4/3/2007 10:00:42 AM,.,RBCWSUserInfo(10496),11,0,32,13414400,21475328",
                "4/4/2007,.,RBCWSSession(6520),25,0,31,25214976,34222080"
            };
            File.WriteAllLines(path, content);

            // Now we run the smoke test of parsing 1 log file containing
            // 2 processes (RBCWSSession, RBCWSUserInfo) we are interested,
            // with the 2 metrics above that we are interested in.
            List <Process> processes = parser.ParseLogs(path);

            Assert.AreEqual(2, processes.Count);

            Process session = processes[0];

            Assert.AreEqual("RBCWSSession", session.ProcessName);
            Assert.AreEqual(3, session.TimeSeries.Count);

            IList <double> data = session.Get("%ProcessorTime");

            Assert.AreEqual(3, data.Count);
            Assert.AreEqual(true, data.Contains(23f));
            Assert.AreEqual(true, data.Contains(24f));
            Assert.AreEqual(true, data.Contains(25f));

            data = session.Get("PrivateBytes");
            Assert.AreEqual(3, data.Count);
            Assert.AreEqual(true, data.Contains(30.208d));
            Assert.AreEqual(true, data.Contains(25.071616d));
            Assert.AreEqual(true, data.Contains(25.214976d));

            Process userinfo = processes[1];

            Assert.AreEqual("RBCWSUserInfo", userinfo.ProcessName);
            Assert.AreEqual(1, userinfo.TimeSeries.Count);

            data = userinfo.Get("%ProcessorTime");
            Assert.AreEqual(1, data.Count);
            Assert.AreEqual(true, data.Contains(11d));

            data = userinfo.Get("PrivateBytes");
            Assert.AreEqual(1, data.Count);
            Assert.AreEqual(true, data.Contains(13.4144d));

            // Clean up.
            File.Delete(path);
        }
Пример #27
0
 /// <summary>
 /// Asynchronously retrieves a list of <see cref="Activity"/>.
 /// </summary>
 /// <param name="processFilter">The filter criteria to apply to the result set.</param>
 /// <param name="limit">Maximun number of items that we are going to return per page.</param>
 /// <param name="offset">Number of pages that will be skipped.</param>
 /// <param name="cancellationToken">The optional token to monitor for cancellation requests.</param>
 /// <param name="context">The optional execution context that applies to this operation.</param>
 /// <returns>A <see cref="Task{TResult}"/> </returns>
 protected abstract Task <PagedResult <Process> > OnSearchWithUserAsync(ProcessFilter processFilter, int offset, int limit, CancellationToken cancellationToken = default(CancellationToken), IDictionary <object, object> context = null);
Пример #28
0
        public static int Main(string[] args)
        {
            string     patterns     = null;
            string     logFiles     = null;
            string     outputPath   = null;
            OutputType outputChoice = 0;

            List <string> helps = new List <string>(
                new string[] { "--help", "-h", "/?", "/HELP", "-help" });

            foreach (string arg in args)
            {
                if (helps.Contains(arg))
                {
                    ShowHelp();
                    return(1);
                }
            }

            switch (args.Length)
            {
            case 1:
                // Valid case:
                // plot_complus.exe log_file.txt
                logFiles     = args[0];
                outputChoice = OutputType.Interactive;
                break;

            case 2:
                // Valid case:
                // plot_complus.exe log_file.txt process_filter
                logFiles     = args[0];
                patterns     = args[1];
                outputChoice = OutputType.Interactive;
                break;

            case 3:
                // Valid cases:
                // plot_complus.exe log_file.txt -o out_graph.png
                // plot_complus.exe log_file.txt -a out_dir
                if (args[1] == "-o" || args[1] == "-a")
                {
                    logFiles     = args[0];
                    outputChoice = (args[1] == "-o" ?
                                    OutputType.File : OutputType.Directory);
                    outputPath = args[2];
                    break;
                }
                else
                {
                    Console.WriteLine("Invalid arguments {0}!", args[1]);
                    return(1);
                }

            case 4:
                // Valid case:
                // plot_complus.exe log_file.txt process_filter -o out_graph.png
                if (args[2] == "-o")
                {
                    logFiles     = args[0];
                    patterns     = args[1];
                    outputChoice = OutputType.File;
                    outputPath   = args[3];

                    break;
                }
                else
                {
                    Console.WriteLine("Invalid arguments {0}!", args[2]);
                    return(1);
                }

            default:
                Console.WriteLine("Wrong number of input arguments!");
                return(1);
            }


            IProcessFilter processFilter;

            if (patterns != null)
            {
                processFilter = new ProcessFilter(patterns);
            }
            else
            {
                processFilter = new AllProcesses();
            }

            ILogger      logger       = new ConsoleLogger();
            SeriesFilter seriesFilter = new SeriesFilter();

            List <string[]> tupleList = Settings.DesiredSeries(
                ConfigurationManager.AppSettings);

            foreach (string[] seriesTuple in tupleList)
            {
                seriesFilter.AddDesiredSeries(seriesTuple[0], seriesTuple[1]);
            }

            GraphPlotter plotter = new GraphPlotter(seriesFilter);

            LogParser      parser    = new LogParser(processFilter, seriesFilter, logger);
            List <Process> processes = parser.ParseLogs(logFiles);

            switch (outputChoice)
            {
            case OutputType.Directory:
                outputPath = Path.GetFullPath(outputPath);

                if (!Directory.Exists(outputPath))
                {
                    Directory.CreateDirectory(outputPath);
                }

                Dictionary <string, List <Process> > processGroup =
                    new Dictionary <string, List <Process> >();

                foreach (Process p in processes)
                {
                    if (!processGroup.ContainsKey(p.ProcessName))
                    {
                        processGroup[p.ProcessName] = new List <Process>();
                    }
                    processGroup[p.ProcessName].Add(p);
                }

                foreach (KeyValuePair <string, List <Process> > pair in processGroup)
                {
                    string path = Path.Combine(outputPath, pair.Key + DEFAULT_EXT);
                    plotter.WriteToFile(pair.Value, path);
                }
                break;

            case OutputType.File:
                outputPath = Path.GetFullPath(outputPath);
                string ext = Path.GetExtension(outputPath).ToLower();

                if (ext.Length > 0)
                {
                    if (!VALID_EXTS.Contains(ext))
                    {
                        Console.WriteLine("The graph cannot be saved in {0}!" +
                                          "  Will save it in {1} instead.", ext, DEFAULT_EXT);
                        outputPath = Path.GetFileNameWithoutExtension(outputPath)
                                     + DEFAULT_EXT;
                    }
                }
                else
                {
                    Console.WriteLine("The graph will be saved in {0}.", DEFAULT_EXT);
                    outputPath = Path.GetFileNameWithoutExtension(outputPath)
                                 + DEFAULT_EXT;
                }

                plotter.WriteToFile(processes, outputPath);
                break;

            case OutputType.Interactive:
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1(plotter, processes));
                break;
            }

            return(0);
        }
Пример #29
0
        public ProcessFilter GenerateProcessFilter(int?offset,
                                                   int?limit,
                                                   List <string> actorIds                  = null,
                                                   List <string> orginatorIds              = null,
                                                   List <string> beneficaryIds             = null,
                                                   List <ActorActionTaken> actionTakenList = null,
                                                   List <string> activityStateNames        = null,
                                                   DateTime?createDateStart                = null,
                                                   DateTime?createDateEnd                  = null,
                                                   int?createDays                       = null,
                                                   DateTime?lastDateStart               = null,
                                                   DateTime?lastDateEnd                 = null,
                                                   int?lastDays                         = null,
                                                   List <string> docTypeNames           = null,
                                                   List <string> processStateNames      = null,
                                                   IDictionary <object, object> context = null)
        {
            try
            {
                ProcessFilter processFilter = new ProcessFilter();

                if (actorIds != null && actorIds.Count > 0)
                {
                    processFilter.ActorIdList = actorIds;
                }

                if (orginatorIds != null && orginatorIds.Count > 0)
                {
                    processFilter.OriginatorIdList = orginatorIds;
                }

                if (beneficaryIds != null && beneficaryIds.Count > 0)
                {
                    processFilter.BeneficiaryIdList = beneficaryIds;
                }

                if (actionTakenList != null && actionTakenList.Count > 0)
                {
                    processFilter.ActionTakenList = actionTakenList;
                }

                if (activityStateNames != null && activityStateNames.Count > 0)
                {
                    processFilter.ActivityStateList = new List <ActivityState>();

                    foreach (string status in activityStateNames)
                    {
                        // don't like this but ...
                        if (status.ToUpper() == ActivityState.Complete.Name.ToUpper())
                        {
                            processFilter.ActivityStateList.Add(ActivityState.Complete);
                        }
                        else if (status.ToUpper() == ActivityState.Pending.Name.ToUpper())
                        {
                            processFilter.ActivityStateList.Add(ActivityState.Pending);
                        }
                        else if (status.ToUpper() == ActivityState.Escalated.Name.ToUpper())
                        {
                            processFilter.ActivityStateList.Add(ActivityState.Escalated);
                        }
                    }
                }

                if (processStateNames != null && processStateNames.Count > 0)
                {
                    processFilter.ProcessStateList = new List <ProcessState>();

                    foreach (string state in processStateNames)
                    {
                        if (state.ToUpper() == ProcessState.Approved.Name.ToUpper())
                        {
                            processFilter.ProcessStateList.Add(ProcessState.Approved);
                        }
                        else if (state.ToUpper() == ProcessState.Pending.Name.ToUpper())
                        {
                            processFilter.ProcessStateList.Add(ProcessState.Pending);
                        }
                        else if (state.ToUpper() == ProcessState.Terminated.Name.ToUpper())
                        {
                            processFilter.ProcessStateList.Add(ProcessState.Terminated);
                        }
                        else if (state.ToUpper() == ProcessState.NotYetPending.Name.ToUpper())
                        {
                            processFilter.ProcessStateList.Add(ProcessState.NotYetPending);
                        }
                    }
                }

                if (createDateStart != null && createDateEnd != null)
                {
                    processFilter.CreateDateRange = new DateRange(createDateStart.GetValueOrDefault(), createDateEnd.GetValueOrDefault());
                }
                else
                {
                    if (createDays != null)
                    {
                        processFilter.CreateDateRange = new DateRange(createDays.GetValueOrDefault());
                    }
                }

                if (lastDateStart != null && lastDateEnd != null)
                {
                    processFilter.LastChangeDateRange = new DateRange(lastDateStart.GetValueOrDefault(), lastDateEnd.GetValueOrDefault());
                }
                else
                {
                    if (lastDays != null)
                    {
                        processFilter.LastChangeDateRange = new DateRange(lastDays.GetValueOrDefault());
                    }
                }

                if (docTypeNames != null && docTypeNames.Count > 0)
                {
                    processFilter.DocumentTypeList = docTypeNames;
                }

                return(processFilter);
            }
            catch (Exception exception)
            {
                _logger.LogInformation($"Error generating the process filter. Reason: {exception}");
                throw;
            }
        }
Пример #30
0
        /// <summary>
        /// Asynchronously retrieves the currently available resources.
        /// </summary>
        /// <param name="processFilter">The list of process identification numbers that we are going to retrieve.</param>
        /// <param name="user">The user that is making the request for information.</param>
        /// <param name="limit">Maximun number of items that we are going to return per page.</param>
        /// <param name="offset">Number of pages that will be skipped.</param>
        /// <param name="cancellationToken">The optional token to monitor for cancellation requests.</param>
        /// <param name="context">The optional execution context that applies to this operation.</param>
        /// <returns>A dictionary of process objects.</returns>
        public async Task <PagedResult <Process> > SearchAsync(ProcessFilter processFilter, Person user, int?offset, int?limit, CancellationToken cancellationToken = default(CancellationToken), IDictionary <object, object> context = null)
        {
            if (limit > 100)
            {
                throw new ArgumentException("Limit must be less that 100!");
            }

            limit  = limit ?? 50;
            offset = offset ?? 0;

            if (processFilter.ProcessStateList == null || processFilter.ProcessStateList.Count == 0)
            {
                processFilter.ProcessStateList = new List <ProcessState>
                {
                    ProcessState.Approved,
                    ProcessState.NotYetPending,
                    ProcessState.Pending,
                    ProcessState.Terminated
                };
            }

            if (processFilter.ActorIdList != null && processFilter.ActorIdList.Count == 1 && processFilter.ActorIdList[0] == user.Id)
            {
                // since we are seaching on actor, we can improve performance by filtering out the nulls in the activity states
                // because they won't have a corresponding actor record. so if the list is empty we can all the other states
                if (processFilter.ActivityStateList == null)
                {
                    processFilter.ActivityStateList = new List <ActivityState>();
                }

                if (processFilter.ActivityStateList.Count == 0)
                {
                    processFilter.ActivityStateList.Add(ActivityState.Complete);
                    processFilter.ActivityStateList.Add(ActivityState.Escalated);
                    processFilter.ActivityStateList.Add(ActivityState.Pending);
                }

                _logger.LogInformation($"Pnnl.Api.Approvals: User {user.Id} is executing search for actor for {processFilter.ToString()}.");
                return(await _processStore.SearchWithActorAsync(processFilter, offset.GetValueOrDefault(), limit.GetValueOrDefault(), cancellationToken, context));
            }
            else if (processFilter.OriginatorIdList != null && processFilter.OriginatorIdList.Count == 1 && processFilter.OriginatorIdList[0] == user.Id)
            {
                _logger.LogInformation($"Pnnl.Api.Approvals: User {user.Id} is executing search for originator for {processFilter.ToString()}.");
                return(await _processStore.SearchWithOriginatorAsync(processFilter, offset.GetValueOrDefault(), limit.GetValueOrDefault(), cancellationToken, context));
            }
            else if (processFilter.BeneficiaryIdList != null && processFilter.BeneficiaryIdList.Count == 1 && processFilter.BeneficiaryIdList[0] == user.Id)
            {
                _logger.LogInformation($"Pnnl.Api.Approvals: User {user.Id} is executing search for beneficiary for {processFilter.ToString()}.");
                return(await _processStore.SearchWithOriginatorAsync(processFilter, offset.GetValueOrDefault(), limit.GetValueOrDefault(), cancellationToken, context));
            }
            else
            {
                // get read list
                var readTypeList = await _securityStore.GetReadDocumentTypesAsync(user);

                if (processFilter.DocumentTypeList != null && processFilter.DocumentTypeList.Count > 0)
                {
                    // intersect with searched doctypes and update filter object
                    var accessList = processFilter.DocumentTypeList.Intersect(readTypeList);
                    processFilter.DocumentTypeList = accessList.ToList <string>();
                }
                else
                {
                    processFilter.DocumentTypeList = (List <string>)readTypeList;
                }

                _logger.LogInformation($"Pnnl.Api.Approvals: User {user.Id} is executing search by user for {processFilter.ToString()}.");
                return(await _processStore.SearchWithUserAsync(processFilter, offset.GetValueOrDefault(), limit.GetValueOrDefault(), cancellationToken, context));
            }
        }