Beispiel #1
0
 private static ScriptTelemetryRecord MakeTelemetryRecord(ref ScriptRuntime runtime)
 {
     // setup a new telemetry record
     return(new ScriptTelemetryRecord {
         username = Telemetry.GetRevitUser(runtime.App),
         revit = Telemetry.GetRevitVersion(runtime.App),
         revitbuild = Telemetry.GetRevitBuild(runtime.App),
         sessionid = runtime.SessionUUID,
         pyrevit = runtime.PyRevitVersion,
         clone = runtime.CloneName,
         debug = runtime.ScriptRuntimeConfigs.DebugMode,
         config = runtime.ScriptRuntimeConfigs.ConfigMode,
         from_gui = runtime.ScriptRuntimeConfigs.ExecutedFromUI,
         exec_id = runtime.ExecId,
         exec_timestamp = runtime.ExecTimestamp,
         commandname = runtime.ScriptData.CommandName,
         commandbundle = runtime.ScriptData.CommandBundle,
         commandextension = runtime.ScriptData.CommandExtension,
         commanduniquename = runtime.ScriptData.CommandUniqueId,
         scriptpath = runtime.ScriptSourceFile,
         docname = runtime.DocumentName,
         docpath = runtime.DocumentPath,
         resultcode = runtime.ExecutionResult,
         commandresults = runtime.GetResultsDictionary(),
         trace = new ScriptTelemetryRecordTraceInfo {
             engine = new ScriptTelemetryRecordEngineInfo {
                 type = runtime.EngineType.ToString().ToLower(),
                 version = runtime.EngineVersion,
                 syspath = runtime.ScriptRuntimeConfigs.SearchPaths,
                 configs = JsonConvert.DeserializeObject <Dictionary <string, string> >(runtime.ScriptRuntimeConfigs.EngineConfigs),
             },
             message = runtime.TraceMessage
         }
     });
 }
Beispiel #2
0
        private void SetupBuiltins(ref ScriptRuntime runtime)
        {
            // get builtins
            IntPtr builtins = pyRevitLabs.PythonNet.Runtime.PyEval_GetBuiltins();

            // Add timestamp and executuin uuid
            SetVariable(builtins, "__execid__", runtime.ExecId);
            SetVariable(builtins, "__timestamp__", runtime.ExecTimestamp);

            // set builtins
            SetVariable(builtins, "__cachedengine__", RecoveredFromCache);
            SetVariable(builtins, "__cachedengineid__", TypeId);
            SetVariable(builtins, "__scriptruntime__", runtime);

            if (runtime.UIApp != null)
            {
                SetVariable(builtins, "__revit__", runtime.UIApp);
            }
            else if (runtime.UIControlledApp != null)
            {
                SetVariable(builtins, "__revit__", runtime.UIControlledApp);
            }
            else if (runtime.App != null)
            {
                SetVariable(builtins, "__revit__", runtime.App);
            }
            else
            {
                SetVariable(builtins, "__revit__", null);
            }

            // Adding data provided by IExternalCommand.Execute
            SetVariable(builtins, "__commanddata__", runtime.ScriptRuntimeConfigs.CommandData);
            SetVariable(builtins, "__elements__", runtime.ScriptRuntimeConfigs.SelectedElements);

            // Add ui button handle
            SetVariable(builtins, "__uibutton__", runtime.UIControl);

            // Adding information on the command being executed
            SetVariable(builtins, "__commandpath__", Path.GetDirectoryName(runtime.ScriptData.ScriptPath));
            SetVariable(builtins, "__configcommandpath__", Path.GetDirectoryName(runtime.ScriptData.ConfigScriptPath));
            SetVariable(builtins, "__commandname__", runtime.ScriptData.CommandName);
            SetVariable(builtins, "__commandbundle__", runtime.ScriptData.CommandBundle);
            SetVariable(builtins, "__commandextension__", runtime.ScriptData.CommandExtension);
            SetVariable(builtins, "__commanduniqueid__", runtime.ScriptData.CommandUniqueId);
            SetVariable(builtins, "__commandcontrolid__", runtime.ScriptData.CommandControlId);
            SetVariable(builtins, "__forceddebugmode__", runtime.ScriptRuntimeConfigs.DebugMode);
            SetVariable(builtins, "__shiftclick__", runtime.ScriptRuntimeConfigs.ConfigMode);

            // Add reference to the results dictionary
            // so the command can add custom values for logging
            SetVariable(builtins, "__result__", runtime.GetResultsDictionary());

            // EVENT HOOKS BUILTINS ----------------------------------------------------------------------------------
            // set event arguments for engine
            SetVariable(builtins, "__eventsender__", runtime.ScriptRuntimeConfigs.EventSender);
            SetVariable(builtins, "__eventargs__", runtime.ScriptRuntimeConfigs.EventArgs);
        }
Beispiel #3
0
        private static ScriptTelemetryRecord MakeTelemetryRecord(ref ScriptRuntime runtime)
        {
            // determine build number
            string revitbuild = "20000101_0000(x64)";

#if (REVIT2013 || REVIT2014 || REVIT2015 || REVIT2016 || REVIT2017 || REVIT2018 || REVIT2019 || REVIT2020)
            revitbuild = runtime.App.VersionBuild;
#else
            // Revit 2021 has a bug on .VersionBuild
            // it reports identical value as .VersionNumber
            // let's give a invalid, but correctly formatted value to the telemetry server
            string revitExePath = Process.GetCurrentProcess().MainModule.FileName;
            if (revitExePath != null && revitExePath != string.Empty)
            {
                HostProductInfo pinfo = RevitProductData.GetBinaryProductInfo(revitExePath);
                if (pinfo.build != null && pinfo.build != string.Empty)
                {
                    revitbuild = string.Format("{0}({1})", pinfo.build, pinfo.target);
                }
            }
#endif

            // setup a new telemetry record
            return(new ScriptTelemetryRecord {
                host_user = UserEnv.GetLoggedInUserName(),
                username = runtime.App.Username,
                revit = runtime.App.VersionNumber,
                revitbuild = revitbuild,
                sessionid = runtime.SessionUUID,
                pyrevit = runtime.PyRevitVersion,
                clone = runtime.CloneName,
                debug = runtime.ScriptRuntimeConfigs.DebugMode,
                config = runtime.ScriptRuntimeConfigs.ConfigMode,
                from_gui = runtime.ScriptRuntimeConfigs.ExecutedFromUI,
                exec_id = runtime.ExecId,
                exec_timestamp = runtime.ExecTimestamp,
                commandname = runtime.ScriptData.CommandName,
                commandbundle = runtime.ScriptData.CommandBundle,
                commandextension = runtime.ScriptData.CommandExtension,
                commanduniquename = runtime.ScriptData.CommandUniqueId,
                scriptpath = runtime.ScriptSourceFile,
                docname = runtime.DocumentName,
                docpath = runtime.DocumentPath,
                resultcode = runtime.ExecutionResult,
                commandresults = runtime.GetResultsDictionary(),
                trace = new ScriptTelemetryRecordTraceInfo {
                    engine = new ScriptTelemetryRecordEngineInfo {
                        type = runtime.EngineType.ToString().ToLower(),
                        version = runtime.EngineVersion,
                        syspath = runtime.ScriptRuntimeConfigs.SearchPaths,
                        configs = new JavaScriptSerializer().Deserialize <Dictionary <string, string> >(runtime.ScriptRuntimeConfigs.EngineConfigs),
                    },
                    message = runtime.TraceMessage
                }
            });
        }
Beispiel #4
0
        private void SetupBuiltins(ref ScriptRuntime runtime)
        {
            // BUILTINS -----------------------------------------------------------------------------------------------
            // Get builtin to add custom variables
            var builtin = IronPython.Hosting.Python.GetBuiltinModule(Engine);

            // Add timestamp and executuin uuid
            builtin.SetVariable("__execid__", runtime.ExecId);
            builtin.SetVariable("__timestamp__", runtime.ExecTimestamp);

            // Let commands know if they're being run in a cached engine
            builtin.SetVariable("__cachedengine__", RecoveredFromCache);

            // Add current engine id to builtins
            builtin.SetVariable("__cachedengineid__", TypeId);

            // Add this script executor to the the builtin to be globally visible everywhere
            // This support pyrevit functionality to ask information about the current executing command
            builtin.SetVariable("__scriptruntime__", runtime);

            // Add host application handle to the builtin to be globally visible everywhere
            if (runtime.UIApp != null)
            {
                builtin.SetVariable("__revit__", runtime.UIApp);
            }
            else if (runtime.UIControlledApp != null)
            {
                builtin.SetVariable("__revit__", runtime.UIControlledApp);
            }
            else if (runtime.App != null)
            {
                builtin.SetVariable("__revit__", runtime.App);
            }
            else
            {
                builtin.SetVariable("__revit__", (object)null);
            }

            // Adding data provided by IExternalCommand.Execute
            builtin.SetVariable("__commanddata__", runtime.ScriptRuntimeConfigs.CommandData);
            builtin.SetVariable("__elements__", runtime.ScriptRuntimeConfigs.SelectedElements);

            // Add ui button handle
            builtin.SetVariable("__uibutton__", runtime.UIControl);

            // Adding information on the command being executed
            builtin.SetVariable("__commandpath__", Path.GetDirectoryName(runtime.ScriptData.ScriptPath));
            builtin.SetVariable("__configcommandpath__", Path.GetDirectoryName(runtime.ScriptData.ConfigScriptPath));
            builtin.SetVariable("__commandname__", runtime.ScriptData.CommandName);
            builtin.SetVariable("__commandbundle__", runtime.ScriptData.CommandBundle);
            builtin.SetVariable("__commandextension__", runtime.ScriptData.CommandExtension);
            builtin.SetVariable("__commanduniqueid__", runtime.ScriptData.CommandUniqueId);
            builtin.SetVariable("__commandcontrolid__", runtime.ScriptData.CommandControlId);
            builtin.SetVariable("__forceddebugmode__", runtime.ScriptRuntimeConfigs.DebugMode);
            builtin.SetVariable("__shiftclick__", runtime.ScriptRuntimeConfigs.ConfigMode);

            // Add reference to the results dictionary
            // so the command can add custom values for logging
            builtin.SetVariable("__result__", runtime.GetResultsDictionary());

            // EVENT HOOKS BUILTINS ----------------------------------------------------------------------------------
            // set event arguments for engine
            builtin.SetVariable("__eventsender__", runtime.ScriptRuntimeConfigs.EventSender);
            builtin.SetVariable("__eventargs__", runtime.ScriptRuntimeConfigs.EventArgs);
        }