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 } }); }
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); }
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 } }); }
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); }