예제 #1
0
        /// <summary>
        /// Display a summary of the run to the user, including locations of any assets.
        /// </summary>
        public static void DisplayRunSummary(LogsharkRequest request)
        {
            // Display logset hash, if relevant.
            if (!String.IsNullOrWhiteSpace(request.RunContext.LogsetHash))
            {
                Log.InfoFormat("Logset hash for this run was '{0}'.", request.RunContext.LogsetHash);
            }

            // Display Postgres output location, if relevant.
            int pluginSuccesses = request.RunContext.PluginResponses.Count(pluginResponse => pluginResponse.SuccessfulExecution);

            if (pluginSuccesses > 0)
            {
                Log.InfoFormat("Plugin backing data was written to Postgres database '{0}\\{1}'.", request.Configuration.PostgresConnectionInfo, request.PostgresDatabaseName);
            }

            // A plugin may run successfully, yet not output a workbook.  We only want to display the workbook output location if at least one workbook was output.
            int workbooksOutput = request.RunContext.PluginResponses.Sum(pluginResponse => pluginResponse.WorkbooksOutput.Count);

            if (workbooksOutput > 0)
            {
                Log.InfoFormat("Plugin workbook output was saved to '{0}'.", PluginExecutor.GetOutputLocation(request.RunId));
            }

            // Display information about any published workbooks, if relevant.
            if (request.PublishWorkbooks && pluginSuccesses > 0)
            {
                Log.Info(WorkbookPublisher.BuildPublishingSummary(request.RunContext.PublishedWorkbooks));
            }
        }
예제 #2
0
        /// <summary>
        /// Execute plugins requested by the user against an initialized logset.
        /// </summary>
        private PluginExecutionResult ExecutePlugins(LogsharkRequest request, RunInitializationResult initializationResult)
        {
            PublishingOptions publishingOptions = BuildPublishingOptions(request, initializationResult);
            var pluginExecutionRequest          = new PluginExecutionRequest(initializationResult, publishingOptions, request.PluginCustomArguments, request.RunId, request.PostgresDatabaseName);

            var pluginExecutor = new PluginExecutor(request.Configuration);

            return(pluginExecutor.ExecutePlugins(pluginExecutionRequest));
        }
예제 #3
0
        private void Execute(IPlugin plugin, Dictionary <string, object> parameters,
                             out Dictionary <string, object> returnValues)
        {
            var pluginExecutor = PluginExecutor.CreateInstance();
            var startParameter = new StartParameter {
                Parameters = parameters
            };

            pluginExecutor.Execute(plugin, startParameter);
            returnValues = startParameter.ReturnValues;
        }
예제 #4
0
        // use this sample if you don't trust Nuget packages and don't want to give client to Nuget Packages
        static void SamplePluginNoTrustExecute(CrmServiceClient client, Guid userId)
        {
            var pluginContext = new PluginExecutionContextFake();

            pluginContext.PrimaryEntityId   = new Guid("12345678-1234-1234-1234-1234567890AB");
            pluginContext.PrimaryEntityName = "account";
            pluginContext.UserId            = userId;
            pluginContext.InputParameters.Add("Target", new Entity("account", new Guid("12345678-1234-1234-1234-1234567890AB")));

            // workaround - client goes directly to your plugin. PluginExecutor can't touch it.
            var testPlugin     = new TestPluginNoTrust();
            var serviceFactory = new ServiceFactoryFake();

            serviceFactory.service = client.OrganizationServiceProxy;
            testPlugin.SetOrganizationServiceFactory(serviceFactory);
            // end of workaround

            PluginExecutor.Execute(testPlugin, null, pluginContext);
        }
예제 #5
0
        static void SamplePluginExecute(CrmServiceClient client, Guid userId)
        {
            var pluginContext = new PluginExecutionContextFake();

            // if within your plugin you use other stuff of plugincontext, initialize it and put appropriate
            // e.g. pluginContext.BusinessUnitId = yourBuId
            // or  pluginContext.PreEntityImages.Add("name", someEntity);
            pluginContext.PrimaryEntityId   = new Guid("12345678-1234-1234-1234-1234567890AB");
            pluginContext.PrimaryEntityName = "account";
            pluginContext.UserId            = userId;
            pluginContext.InitiatingUserId  = userId;
            // set your target record lie this
            var e = new Entity("account", new Guid("12345678-1234-1234-1234-1234567890AB"));

            e.Attributes["name"] = "someName";
            pluginContext.InputParameters.Add("Target", e);
            var testPlugin = new TestPlugin();

            // sample for plugin constructors requiering secure and unsecure config:
            // TestPlugin testPlugin = new TestPlugin(yourSecureConfig, yourUnsecureConfig); //- both parameters can be null or empty string

            PluginExecutor.Execute(testPlugin, client, pluginContext);
        }
예제 #6
0
        public virtual string BuildRunSummary()
        {
            var summary = new StringBuilder();

            // Display logset hash, if relevant.
            if (InitializationResult != null && !String.IsNullOrWhiteSpace(InitializationResult.LogsetHash))
            {
                summary.AppendFormat("Logset hash for this run was '{0}'.", InitializationResult.LogsetHash);
            }

            // Display Postgres output location, if relevant.
            if (PluginExecutionResult != null)
            {
                int pluginSuccesses = PluginExecutionResult.PluginResponses.Count(pluginResponse => pluginResponse.SuccessfulExecution);
                if (pluginSuccesses > 0)
                {
                    Request.Configuration.PostgresConnectionInfo.MatchSome(connectionInfo =>
                    {
                        summary.AppendLine();
                        summary.AppendFormat("Plugin backing data was written to Postgres database '{0}\\{1}'.", connectionInfo, Request.PostgresDatabaseName);
                    });
                }

                // A plugin may run successfully, yet not output a workbook.  We only want to display the workbook output location if at least one workbook was output.
                int workbooksOutput = PluginExecutionResult.PluginResponses.Sum(pluginResponse => pluginResponse.WorkbooksOutput.Count);
                if (workbooksOutput > 0)
                {
                    summary.AppendLine();
                    summary.AppendFormat("Plugin workbook output was saved to '{0}'.", PluginExecutor.GetRunOutputDirectory(Request.Configuration.ApplicationOutputDirectory, Request.RunId));
                }

                // Display information about any published workbooks, if relevant.
                if (Request.PublishWorkbooks && pluginSuccesses > 0)
                {
                    var publishedWorkbookResults = PluginExecutionResult.PluginResponses
                                                   .Where(response => response.WorkbooksPublished != null)
                                                   .SelectMany(response => response.WorkbooksPublished)
                                                   .ToList();
                    summary.AppendLine();
                    summary.AppendFormat(WorkbookPublisher.BuildPublishingSummary(publishedWorkbookResults));
                }
            }

            return(summary.ToString());
        }
예제 #7
0
        /// <summary>
        /// Executes requested Logshark plugins.
        /// </summary>
        public static void ExecutePlugins(LogsharkRequest request)
        {
            PluginExecutor executor = new PluginExecutor(request);

            executor.ExecutePlugins();
        }
예제 #8
0
        private void RunPlugin(object menuItem)
        {
            var pluginExecutor = PluginExecutor.CreateInstance();

            pluginExecutor.Execute(menuItem);
        }