-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathlib.js
66 lines (57 loc) · 1.55 KB
/
lib.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
var os = require('os')
var getIPList = function() {
var interfaces = os.networkInterfaces()
var result = []
for (var dev in interfaces) {
interfaces[dev].forEach(function(details) {
if (details.family == 'IPv4') result.push(details.address)
})
}
return result
}
exports.getIPList = getIPList
var startOverlap = function(str1, str2) {
var i
for (i = 0; i < str1.length; i++) {
i = parseInt(i)
if (str1[i] != str2[i]) return i
}
return i
}
exports.startOverlap = startOverlap
var findClosestIP = function(ip) {
var ipList = getIPList()
var bestMatch = ipList[0]
var overlap = 0
for (idx in ipList) {
currentOverlap = startOverlap(ip, ipList[idx])
if (currentOverlap > overlap) {
bestMatch = ipList[idx]
overlap = currentOverlap
}
}
return bestMatch
}
exports.findClosestIP = findClosestIP
var expiringArray = function() {
var arr = [];
var EXPIRY_TIME = 1000;
var add = function(index, value) {
arr[index] = { timestamp: new Date().getTime(), value: value }
}
var sum = function(index, value) {
var total = 0
var now = new Date().getTime()
arr.forEach(function(el, index) {
if (!el) return
if (now - el.timestamp > EXPIRY_TIME) {
arr[index] = null
return
}
total += el.value
})
return total
}
return { add: add, sum: sum, data: arr }
}
exports.expiringArray = expiringArray