mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-10-31 04:51:31 +08:00 
			
		
		
		
	better logging and notifications on script errors for easier debugging
This commit is contained in:
		
							parent
							
								
									513748836e
								
							
						
					
					
						commit
						145efe67c3
					
				| @ -1,5 +1,6 @@ | ||||
| import ScriptContext from "./script_context.js"; | ||||
| import server from "./server.js"; | ||||
| import infoService from "./info.js"; | ||||
| 
 | ||||
| async function getAndExecuteBundle(noteId, originEntity = null) { | ||||
|     const bundle = await server.get('script/bundle/' + noteId); | ||||
| @ -10,9 +11,14 @@ async function getAndExecuteBundle(noteId, originEntity = null) { | ||||
| async function executeBundle(bundle, originEntity) { | ||||
|     const apiContext = ScriptContext(bundle.note, bundle.allNotes, originEntity); | ||||
| 
 | ||||
|     try { | ||||
|         return await (function () { | ||||
|             return eval(`const apiContext = this; (async function() { ${bundle.script}\r\n})()`); | ||||
|         }.call(apiContext)); | ||||
|     } | ||||
|     catch (e) { | ||||
|         infoService.showAndLogError(`Execution of script "${bundle.note.title}" (${bundle.note.noteId}) failed with error: ${e.message}`); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| async function executeStartupBundles() { | ||||
|  | ||||
| @ -14,6 +14,12 @@ function showMessage(message) { | ||||
|     }); | ||||
| } | ||||
| 
 | ||||
| function showAndLogError(message, delay = 10000) { | ||||
|     showError(message, delay); | ||||
| 
 | ||||
|     messagingService.logError(message); | ||||
| } | ||||
| 
 | ||||
| function showError(message, delay = 10000) { | ||||
|     console.log(utils.now(), "error: ", message); | ||||
| 
 | ||||
| @ -36,5 +42,6 @@ function throwError(message) { | ||||
| export default { | ||||
|     showMessage, | ||||
|     showError, | ||||
|     showAndLogError, | ||||
|     throwError | ||||
| } | ||||
| @ -72,8 +72,13 @@ function ScriptApi(startNote, currentNote, originEntity = null) { | ||||
|             originEntityId: originEntity ? originEntity.noteId : null | ||||
|         }); | ||||
| 
 | ||||
|         if (ret.success) { | ||||
|             return ret.executionResult; | ||||
|         } | ||||
|         else { | ||||
|             throw new Error("server error: " + ret.error); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return { | ||||
|         startNote: startNote, | ||||
|  | ||||
| @ -5,10 +5,15 @@ const attributeService = require('../../services/attributes'); | ||||
| const repository = require('../../services/repository'); | ||||
| 
 | ||||
| async function exec(req) { | ||||
|     try { | ||||
|         const result = await scriptService.executeScript(req.body.script, req.body.params, req.body.startNoteId, | ||||
|             req.body.currentNoteId, req.body.originEntityName, req.body.originEntityId); | ||||
| 
 | ||||
|     return { executionResult: result }; | ||||
|         return { success: true, executionResult: result }; | ||||
|     } | ||||
|     catch (e) { | ||||
|         return { success: false, error: e.message }; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| async function run(req) { | ||||
|  | ||||
| @ -3,6 +3,7 @@ const ScriptContext = require('./script_context'); | ||||
| const repository = require('./repository'); | ||||
| const cls = require('./cls'); | ||||
| const sourceIdService = require('./source_id'); | ||||
| const log = require('./log'); | ||||
| 
 | ||||
| async function executeNote(note, originEntity) { | ||||
|     if (!note.isJavaScript()) { | ||||
| @ -25,12 +26,17 @@ async function executeBundle(bundle, startNote, originEntity = null) { | ||||
| 
 | ||||
|     const ctx = new ScriptContext(startNote, bundle.allNotes, originEntity); | ||||
| 
 | ||||
|     try { | ||||
|         if (await bundle.note.hasLabel('manualTransactionHandling')) { | ||||
|             return await execute(ctx, script, ''); | ||||
|         } | ||||
|         else { | ||||
|             return await sql.transactional(async () => await execute(ctx, script, '')); | ||||
|         } | ||||
|     } | ||||
|     catch (e) { | ||||
|         log.error(`Execution of script "${bundle.note.title}" (${bundle.note.noteId}) failed with error: ${e.message}`); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 azivner
						azivner