Adding CPU and I/O metrics to process module
This commit is contained in:
		
					parent
					
						
							
								70e199e255
							
						
					
				
			
			
				commit
				
					
						8a5aa04756
					
				
			
		
					 5 changed files with 84 additions and 0 deletions
				
			
		|  | @ -14,6 +14,7 @@ | ||||||
| #include "atom/common/node_includes.h" | #include "atom/common/node_includes.h" | ||||||
| #include "base/logging.h" | #include "base/logging.h" | ||||||
| #include "base/process/process_metrics.h" | #include "base/process/process_metrics.h" | ||||||
|  | #include "base/sys_info.h" | ||||||
| #include "native_mate/dictionary.h" | #include "native_mate/dictionary.h" | ||||||
| 
 | 
 | ||||||
| namespace atom { | namespace atom { | ||||||
|  | @ -23,6 +24,38 @@ namespace { | ||||||
| // Dummy class type that used for crashing the program.
 | // Dummy class type that used for crashing the program.
 | ||||||
| struct DummyClass { bool crash; }; | struct DummyClass { bool crash; }; | ||||||
| 
 | 
 | ||||||
|  | v8::Local<v8::Value> GetCPUUsage(v8::Isolate* isolate) { | ||||||
|  |   std::unique_ptr<base::ProcessMetrics> metrics( | ||||||
|  |       base::ProcessMetrics::CreateCurrentProcessMetrics()); | ||||||
|  | 
 | ||||||
|  |   mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate); | ||||||
|  |   int processor_count = base::SysInfo::NumberOfProcessors(); | ||||||
|  |   dict.Set("percentCPUUsage", | ||||||
|  |            metrics->GetPlatformIndependentCPUUsage() / processor_count); | ||||||
|  |   dict.Set("idleWakeupsPerSecond", metrics->GetIdleWakeupsPerSecond()); | ||||||
|  | 
 | ||||||
|  |   return dict.GetHandle(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | v8::Local<v8::Value> GetIOCounters(v8::Isolate* isolate) { | ||||||
|  |   std::unique_ptr<base::ProcessMetrics> metrics( | ||||||
|  |       base::ProcessMetrics::CreateCurrentProcessMetrics()); | ||||||
|  |   base::IoCounters io_counters; | ||||||
|  |   const bool got_counters = metrics->GetIOCounters(&io_counters); | ||||||
|  |   mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate); | ||||||
|  | 
 | ||||||
|  |   if (got_counters) { | ||||||
|  |     dict.Set("readOperationCount", io_counters.ReadOperationCount); | ||||||
|  |     dict.Set("writeOperationCount", io_counters.WriteOperationCount); | ||||||
|  |     dict.Set("otherOperationCount", io_counters.OtherOperationCount); | ||||||
|  |     dict.Set("readTransferCount", io_counters.ReadTransferCount); | ||||||
|  |     dict.Set("writeTransferCount", io_counters.WriteTransferCount); | ||||||
|  |     dict.Set("otherTransferCount", io_counters.OtherTransferCount); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return dict.GetHandle(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Called when there is a fatal error in V8, we just crash the process here so
 | // Called when there is a fatal error in V8, we just crash the process here so
 | ||||||
| // we can get the stack trace.
 | // we can get the stack trace.
 | ||||||
| void FatalErrorCallback(const char* location, const char* message) { | void FatalErrorCallback(const char* location, const char* message) { | ||||||
|  | @ -52,6 +85,8 @@ void AtomBindings::BindTo(v8::Isolate* isolate, | ||||||
|   dict.SetMethod("log", &Log); |   dict.SetMethod("log", &Log); | ||||||
|   dict.SetMethod("getProcessMemoryInfo", &GetProcessMemoryInfo); |   dict.SetMethod("getProcessMemoryInfo", &GetProcessMemoryInfo); | ||||||
|   dict.SetMethod("getSystemMemoryInfo", &GetSystemMemoryInfo); |   dict.SetMethod("getSystemMemoryInfo", &GetSystemMemoryInfo); | ||||||
|  |   dict.SetMethod("getCPUUsage", &GetCPUUsage); | ||||||
|  |   dict.SetMethod("getIOCounters", &GetIOCounters); | ||||||
| #if defined(OS_POSIX) | #if defined(OS_POSIX) | ||||||
|   dict.SetMethod("setFdLimit", &base::SetFdLimit); |   dict.SetMethod("setFdLimit", &base::SetFdLimit); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -116,3 +116,15 @@ Returns `Object`: | ||||||
| 
 | 
 | ||||||
| Returns an object giving memory usage statistics about the entire system. Note | Returns an object giving memory usage statistics about the entire system. Note | ||||||
| that all statistics are reported in Kilobytes. | that all statistics are reported in Kilobytes. | ||||||
|  | 
 | ||||||
|  | ### `process.getCPUUsage()` | ||||||
|  | 
 | ||||||
|  | Returns: | ||||||
|  | 
 | ||||||
|  | * `CPUUsage` [CPUUsage](structures/cpu-usage.md) | ||||||
|  | 
 | ||||||
|  | ### `process.getIOCounters()` | ||||||
|  | 
 | ||||||
|  | Returns: | ||||||
|  | 
 | ||||||
|  | * `IOCounters` [IOCounters](structures/io-counters.md) | ||||||
							
								
								
									
										6
									
								
								docs/api/structures/cpu-usage.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docs/api/structures/cpu-usage.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | # CPUUsage Object | ||||||
|  | 
 | ||||||
|  | * `percentCPUUsage` number - Percentage of CPU used since the last call to getCPUUsage. | ||||||
|  |   First call returns 0. | ||||||
|  | * `idleWakeupsPerSecond` number - The number of average idle cpu wakeups per second | ||||||
|  |   since the last call to getCPUUsage. First call returns 0. | ||||||
							
								
								
									
										8
									
								
								docs/api/structures/io-counters.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								docs/api/structures/io-counters.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | # IOCounters Object | ||||||
|  | 
 | ||||||
|  | * `readOperationCount` Number - The number of I/O read operations. | ||||||
|  | * `writeOperationCount` Number - The number of I/O write operations. | ||||||
|  | * `otherOperationCount` Number - Then number of I/O other operations. | ||||||
|  | * `readTransferCount` Number - The number of I/O read transfers. | ||||||
|  | * `writeTransferCount` Number - The number of I/O write transfers. | ||||||
|  | * `otherTransferCount` Number - Then number of I/O other transfers. | ||||||
							
								
								
									
										23
									
								
								spec/api-process-spec.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								spec/api-process-spec.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | ||||||
|  | const assert = require('assert') | ||||||
|  | 
 | ||||||
|  | describe('process module', function () { | ||||||
|  |   describe('process.getCPUUsage()', function () { | ||||||
|  |     it('returns a cpu usage object', function () { | ||||||
|  |       var cpuUsage = process.getCPUUsage() | ||||||
|  |       assert.equal(typeof cpuUsage.percentCPUUsage, 'number') | ||||||
|  |       assert.equal(typeof cpuUsage.idleWakeupsPerSecond, 'number') | ||||||
|  |     }) | ||||||
|  |   }) | ||||||
|  | 
 | ||||||
|  |   describe('process.getIOCounters()', function () { | ||||||
|  |     it('returns an io counters object', function () { | ||||||
|  |       var ioCounters = process.getIOCounters() | ||||||
|  |       assert.ok(ioCounters.readOperationCount > 0, 'read operation count not > 0') | ||||||
|  |       assert.ok(ioCounters.writeOperationCount > 0, 'write operation count not > 0') | ||||||
|  |       assert.ok(ioCounters.otherOperationCount > 0, 'other operation count not > 0') | ||||||
|  |       assert.ok(ioCounters.readTransferCount > 0, 'read transfer count not > 0') | ||||||
|  |       assert.ok(ioCounters.writeTransferCount > 0, 'write transfer count not > 0') | ||||||
|  |       assert.ok(ioCounters.otherTransferCount > 0, 'other transfer count not > 0') | ||||||
|  |     }) | ||||||
|  |   }) | ||||||
|  | }) | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Hari Krishna Reddy Juturu
				Hari Krishna Reddy Juturu