Add First version
This commit is contained in:
		
							
								
								
									
										60
									
								
								basics.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								basics.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
| const fs = require("fs") | ||||
| const path = require("path") | ||||
|  | ||||
|  | ||||
| module.exports.getDate = function (formated) { | ||||
|  | ||||
|     var date = new Date() | ||||
|  | ||||
|     // [Date Format] - Format de la date | ||||
|  | ||||
|     var gmonth = date.getMonth() + 1 | ||||
|     var gday = date.getDate() | ||||
|     var gHour = date.getHours() | ||||
|     var gMinute = date.getMinutes() | ||||
|     var gSecondes = date.getSeconds() | ||||
|  | ||||
|  | ||||
|     if(date.getMonth() + 1 < 10) { | ||||
|         gmonth = "0" + (date.getMonth() + 1) | ||||
|     }  | ||||
|  | ||||
|     if(date.getDate() + 1 <= 10) { | ||||
|         gday = "0" + date.getDate() | ||||
|     } | ||||
|  | ||||
|     if(date.getHours() + 1 <= 10) { | ||||
|         gHour = "0" + date.getHours() | ||||
|     } | ||||
|  | ||||
|     if(date.getMinutes() + 1 <= 10) { | ||||
|         gMinute = "0" + date.getMinutes() | ||||
|     } | ||||
|  | ||||
|     if(date.getSeconds() + 1 <= 10) { | ||||
|         gSecondes = "0" + date.getSeconds() | ||||
|     } | ||||
|  | ||||
|     if(!formated) { | ||||
|         return gday + "/" + gmonth +  " - " + gHour + "h"  + "-" + gMinute + "m" + "-" + gSecondes + "s"  | ||||
|     } else { | ||||
|         return date.getFullYear() + "-" + gmonth + "-" + gday + "-" + gHour + "h"  + "-" + gMinute + "m" + "-" + gSecondes + "s"  | ||||
|          | ||||
|     } | ||||
|  | ||||
|      | ||||
| } | ||||
|  | ||||
|  | ||||
| module.exports.getMetricsFile = () => { | ||||
|     if(!fs.existsSync(path.join(__dirname, "/metrics.json"))) { | ||||
|         fs.writeFileSync(path.join(__dirname, "/metrics.json"), JSON.stringify([], null, 2)) | ||||
|     } else { | ||||
|         return JSON.parse(fs.readFileSync(path.join(__dirname, "/metrics.json"))) | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| module.exports.saveMetricsFile = (data) => { | ||||
|     fs.writeFileSync(path.join(__dirname, "/metrics.json"), JSON.stringify(data, null, 2)) | ||||
| } | ||||
							
								
								
									
										107
									
								
								main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								main.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
| //WebMetrik - Web Analytics | ||||
| //Git : https://git.raphix.fr/lib/webmetrik | ||||
| //Author : Raphix | ||||
|  | ||||
| const basics = require('./basics.js'); | ||||
| const fs = require('fs'); | ||||
|  | ||||
| module.exports.Metric = class { | ||||
|     name; | ||||
|     description; | ||||
|     value; | ||||
|     constructor(name, description) { | ||||
|         const metricsFile = basics.getMetricsFile(); | ||||
|         //Check if the metric already exists and set the value and description of the metric | ||||
|         if(basics.getMetricsFile().findIndex(x => x.name == name) != -1) { | ||||
|             this.name = name; | ||||
|             this.description = basics.getMetricsFile()[basics.getMetricsFile().findIndex(x => x.name == name)].description; | ||||
|             this.value = basics.getMetricsFile()[basics.getMetricsFile().findIndex(x => x.name == name)].value; | ||||
|         } else { | ||||
|             this.name = name; | ||||
|             this.description = description; | ||||
|             this.value = 0; | ||||
|  | ||||
|             //save it to the file | ||||
|             basics.saveMetricsFile([...basics.getMetricsFile(), {name: this.name, description: this.description, value: this.value}]) | ||||
|  | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     setValue(value) { | ||||
|  | ||||
|         //get the value of the metric from the file and set it to the value of the metric | ||||
|         this.value = basics.getMetricsFile()[basics.getMetricsFile().findIndex(x => x.name == this.name)].value; | ||||
|        | ||||
|         //save it to the file | ||||
|         basics.saveMetricsFile(basics.getMetricsFile().map(x => { | ||||
|             if(x.name == this.name) { | ||||
|                 x.value = value; | ||||
|             } | ||||
|             return x; | ||||
|         })) | ||||
|     } | ||||
|  | ||||
|     getValue() { | ||||
|         //get the value of the metric from the file and set it to the value of the metric | ||||
|         this.value = basics.getMetricsFile()[basics.getMetricsFile().findIndex(x => x.name == this.name)].value; | ||||
|         return this.value; | ||||
|     }    | ||||
|  | ||||
|     setDescription(description) { | ||||
|         //get the value of the metric from the file and set it to the value of the metric | ||||
|         this.value = basics.getMetricsFile()[basics.getMetricsFile().findIndex(x => x.name == this.name)].value; | ||||
|        | ||||
|         //save it to the file | ||||
|         basics.saveMetricsFile(basics.getMetricsFile().map(x => { | ||||
|             if(x.name == this.name) { | ||||
|                 x.description = description; | ||||
|             } | ||||
|             return x; | ||||
|         })) | ||||
|     }        | ||||
|  | ||||
|     clearMetric() { | ||||
|         //delete the metric from the file | ||||
|         basics.saveMetricsFile(basics.getMetricsFile().filter(x => x.name != this.name)) | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
| module.exports.publishMetrics = (port, privateKey) => { | ||||
|     const http = require('http'); | ||||
|     const url = require('url'); | ||||
|  | ||||
|     const server = http.createServer((req, res) => { | ||||
|         const parsedUrl = url.parse(req.url, true); | ||||
|         const pathname = parsedUrl.pathname; | ||||
|         const query = parsedUrl.query; | ||||
|  | ||||
|         if(pathname == "/metrics") { | ||||
|             if(query.privatekey == privateKey) { | ||||
|                 res.writeHead(200, {'Content-Type': 'application/json'}); | ||||
|                 res.end(JSON.stringify(basics.getMetricsFile())); | ||||
|             } else { | ||||
|                 res.writeHead(403, {'Content-Type': 'application/json'}); | ||||
|                 res.end(JSON.stringify({error: "Invalid private key"})); | ||||
|             } | ||||
|         } else { | ||||
|             res.writeHead(404, {'Content-Type': 'application/json'}); | ||||
|             res.end(JSON.stringify({error: "Invalid path"})); | ||||
|         } | ||||
|     }) | ||||
|  | ||||
|     server.listen(port, () => { | ||||
|         console.log("WebMetrik is listening on port " + port); | ||||
|     }) | ||||
| } | ||||
|  | ||||
|  | ||||
| // CHeck if the metric exitst and delete it | ||||
|  | ||||
| module.exports.deleteMetric = (name) => { | ||||
|     if(basics.getMetricsFile().findIndex(x => x.name == name) != -1) { | ||||
|         basics.saveMetricsFile(basics.getMetricsFile().filter(x => x.name != name)) | ||||
|     }  | ||||
| } | ||||
							
								
								
									
										7
									
								
								metrics.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								metrics.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| [ | ||||
|   { | ||||
|     "name": "test", | ||||
|     "description": "test metric", | ||||
|     "value": 20 | ||||
|   } | ||||
| ] | ||||
							
								
								
									
										9
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| { | ||||
|   "name": "webmetrik", | ||||
|   "version": "0.0.1", | ||||
|   "description": "NodeJS - npm package - Make metrics and make it available by making a httpServer", | ||||
|   "main": "main.js", | ||||
|   "keywords": [], | ||||
|   "author": "Raphix", | ||||
|   "license": "ISC" | ||||
| } | ||||
		Reference in New Issue
	
	Block a user