File: generate-data.js

package info (click to toggle)
node-unicode-data 0~20220914%2Bgitb601441-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid, trixie
  • size: 89,996 kB
  • sloc: javascript: 1,716; makefile: 27; sh: 23
file content (79 lines) | stat: -rw-r--r-- 1,769 bytes parent folder | download | duplicates (3)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
'use strict';

const resources = require('../debian/resources.js');
const generateData = require('../index.js');
const utils = require('../scripts/utils.js');

// -----------------------------------------------------------------------------

const cluster = require('cluster');
const numCPUs = require('os').cpus().length;

const pad = (number) => {
	return String(number).padStart(2, '0');
};

const getTime = () => {
	const currentdate = new Date();
	return pad(currentdate.getHours()) + ':' +
		pad(currentdate.getMinutes()) + ':' +
		pad(currentdate.getSeconds());
};

const complicatedWorkThatTakesTime = (resource, callback) => {

	if (resource.length) {

		const version = resource[0].version;
		console.log('[%s] Worker %d \u2192 Unicode v%s',
			getTime(), cluster.worker.id, version);

		generateData(version);

		complicatedWorkThatTakesTime(
			resource.slice(1),
			callback
		);

	} else {
		callback();
	}
};

if (cluster.isMaster) {

	for (let index = 0; index < numCPUs; index++) {
		cluster.fork();
	}

	cluster.on('online', (worker) => {

		const size = Math.round(resources.length / numCPUs);
		const x = worker.id - 1;

		// divide work
		if (worker.id === 1) { // first worker
			worker.send(resources.slice(0, worker.id * size));
		} else if (worker.id < numCPUs) { // other workers, except the last one
			worker.send(resources.slice(x * size, worker.id * size));
		} else { // last worker
			worker.send(resources.slice(x * size, resources.length));
		}

	});

	cluster.on('exit', (worker) => {
		if (worker.exitedAfterDisconnect) {
			console.log('[%s] Worker %d is done!', getTime(), worker.id);
		}
	});

} else {

	process.on('message', (message) => {
		complicatedWorkThatTakesTime(message, () => {
			cluster.worker.kill();
		});
	});

}