mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-03-09 15:40:18 +00:00 
			
		
		
		
	Started work on reports feature.
This commit is contained in:
		
							parent
							
								
									e2105d6844
								
							
						
					
					
						commit
						a15a5e779d
					
				
					 4 changed files with 242 additions and 4 deletions
				
			
		
							
								
								
									
										62
									
								
								meshuser.js
									
										
									
									
									
								
							
							
						
						
									
										62
									
								
								meshuser.js
									
										
									
									
									
								
							|  | @ -5408,6 +5408,68 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use | |||
| 
 | ||||
|                 break; | ||||
|             } | ||||
|             case 'report': { | ||||
|                 // Report request. Validate the input
 | ||||
|                 if (common.validateInt(command.type, 1, 1) == false) break; // Validate type
 | ||||
|                 if (common.validateInt(command.groupBy, 1, 3) == false) break; // Validate groupBy: 1 = User, 2 = Device, 3 = Day
 | ||||
|                 if ((typeof command.start != 'number') || (typeof command.end != 'number') || (command.start >= command.end)) break; // Validate start and end time
 | ||||
| 
 | ||||
|                 if (command.type == 1) { // This is the remote session report. Shows desktop, terminal, files...
 | ||||
|                     // If we are not user administrator on this site, only search for events with our own user id.
 | ||||
|                     var ids = [user._id]; | ||||
|                     if ((user.siteadmin & SITERIGHT_MANAGEUSERS) != 0) { ids = ['*']; } | ||||
| 
 | ||||
|                     // Get the events in the time range
 | ||||
|                     db.GetEventsTimeRange(ids, domain.id, [5, 10, 12], new Date(command.start * 1000), new Date(command.end * 1000), function (err, docs) { | ||||
|                         if (err != null) return; | ||||
|                         var data = { groups: {} }; | ||||
| 
 | ||||
|                         // Columns
 | ||||
|                         if (command.groupBy == 1) { | ||||
|                             data.groupFormat = 'user'; | ||||
|                             data.columns = [{ id: 'time', title: "time", format: 'datetime' }, { id: "nodeid", title: "device", format: "node" }, { id: "protocol", title: "session", format: "protocol", align: "center" }, { id: "length", title: "length", format: "seconds", align: "center" } ]; | ||||
|                         } else if (command.groupBy == 2) { | ||||
|                             data.groupFormat = 'node'; | ||||
|                             data.columns = [{ id: 'time', title: "time", format: 'datetime' }, { id: "userid", title: "user", format: "user" }, { id: "protocol", title: "session", format: "protocol", align: "center" }, { id: "length", title: "length", format: "seconds", align: "center" } ]; | ||||
|                         } else if (command.groupBy == 3) { | ||||
|                             data.columns = [{ id: 'time', title: "time", format: 'time' }, { id: "nodeid", title: "device", format: "node" }, { id: "userid", title: "user", format: "user" }, { id: "protocol", title: "session", format: "protocol", align: "center" }, { id: "length", title: "length", format: "seconds", align:"center" } ]; | ||||
|                         } | ||||
| 
 | ||||
|                         // Rows
 | ||||
|                         for (var i in docs) { | ||||
|                             var entry = { time: docs[i].time.valueOf() }; | ||||
| 
 | ||||
|                             // UserID
 | ||||
|                             if (command.groupBy != 1) { entry.userid = docs[i].userid; } | ||||
|                             if (command.groupBy != 2) { entry.nodeid = docs[i].nodeid; } | ||||
|                             entry.protocol = docs[i].protocol; | ||||
| 
 | ||||
|                             // Session length
 | ||||
|                             if (((docs[i].msgid == 10) || (docs[i].msgid == 12)) && (docs[i].msgArgs != null) && (typeof docs[i].msgArgs == 'object') && (typeof docs[i].msgArgs[3] == 'number')) { entry.length = docs[i].msgArgs[3]; } | ||||
| 
 | ||||
|                             if (command.groupBy == 1) { // Add entry to per user group
 | ||||
|                                 if (data.groups[docs[i].userid] == null) { data.groups[docs[i].userid] = { entries: [] }; } | ||||
|                                 data.groups[docs[i].userid].entries.push(entry); | ||||
|                             } else if (command.groupBy == 2) { // Add entry to per device group
 | ||||
|                                 if (data.groups[docs[i].nodeid] == null) { data.groups[docs[i].nodeid] = { entries: [] }; } | ||||
|                                 data.groups[docs[i].nodeid].entries.push(entry); | ||||
|                             } else if (command.groupBy == 3) { // Add entry to per day group
 | ||||
|                                 var day; | ||||
|                                 if ((typeof command.l == 'string') && (typeof command.tz == 'string')) { | ||||
|                                     day = new Date(docs[i].time).toLocaleDateString(command.l, { timeZone: command.tz }); | ||||
|                                 } else { | ||||
|                                     day = docs[i].time; // TODO
 | ||||
|                                 } | ||||
|                                 if (data.groups[day] == null) { data.groups[day] = { entries: [] }; } | ||||
|                                 data.groups[day].entries.push(entry); | ||||
|                             } | ||||
| 
 | ||||
|                         } | ||||
|                         try { ws.send(JSON.stringify({ action: 'report', data: data })); } catch (ex) { } | ||||
|                     }); | ||||
|                 } | ||||
|                 break; | ||||
|             } | ||||
|             default: { | ||||
|                 // Unknown user action
 | ||||
|                 console.log('Unknown action from user ' + user.name + ': ' + command.action + '.'); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue