Add First version

This commit is contained in:
Raphael 2024-01-13 16:42:39 +01:00
parent 7d8f14c843
commit bfe15c545e
4 changed files with 183 additions and 0 deletions

60
basics.js Normal file
View 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
View 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
View File

@ -0,0 +1,7 @@
[
{
"name": "test",
"description": "test metric",
"value": 20
}
]

9
package.json Normal file
View 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"
}