ee-core 2.9.2 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +65 -65
  3. package/addon/index.js +34 -34
  4. package/addon/window/index.js +98 -98
  5. package/bin/tools.js +8 -8
  6. package/config/cache.js +41 -38
  7. package/config/config.default.js +331 -330
  8. package/config/index.js +75 -73
  9. package/const/channel.js +17 -17
  10. package/const/index.js +8 -8
  11. package/controller/baseContextClass.js +34 -34
  12. package/controller/index.js +34 -34
  13. package/core/index.js +10 -10
  14. package/core/lib/ee.js +216 -216
  15. package/core/lib/loader/context_loader.js +106 -106
  16. package/core/lib/loader/ee_loader.js +435 -435
  17. package/core/lib/loader/file_loader.js +326 -326
  18. package/core/lib/loader/mixin/addon.js +32 -32
  19. package/core/lib/loader/mixin/config.js +130 -130
  20. package/core/lib/loader/mixin/controller.js +125 -125
  21. package/core/lib/loader/mixin/service.js +28 -28
  22. package/core/lib/utils/base_context_class.js +34 -34
  23. package/core/lib/utils/function.js +30 -30
  24. package/core/lib/utils/index.js +133 -133
  25. package/core/lib/utils/sequencify.js +59 -59
  26. package/core/lib/utils/timing.js +77 -77
  27. package/cross/index.js +183 -183
  28. package/cross/spawnProcess.js +183 -183
  29. package/ee/appLoader.js +48 -48
  30. package/ee/application.js +99 -99
  31. package/ee/baseApp.js +103 -102
  32. package/ee/eeApp.js +408 -408
  33. package/ee/index.js +57 -57
  34. package/electron/app/index.js +64 -58
  35. package/electron/index.js +19 -19
  36. package/electron/window/index.js +73 -73
  37. package/electron/window/winState.js +186 -186
  38. package/exception/index.js +112 -112
  39. package/html/boot.html +98 -98
  40. package/html/cross-failure.html +28 -28
  41. package/html/failure.html +28 -28
  42. package/html/index.js +13 -13
  43. package/httpclient/index.js +161 -161
  44. package/index.js +54 -54
  45. package/jobs/baseJobClass.js +16 -16
  46. package/jobs/child/app.js +65 -65
  47. package/jobs/child/forkProcess.js +145 -145
  48. package/jobs/child/index.js +82 -82
  49. package/jobs/child-pool/index.js +213 -213
  50. package/jobs/index.js +8 -8
  51. package/jobs/load-balancer/algorithm/index.js +11 -11
  52. package/jobs/load-balancer/algorithm/minimumConnection.js +18 -18
  53. package/jobs/load-balancer/algorithm/polling.js +11 -11
  54. package/jobs/load-balancer/algorithm/random.js +9 -9
  55. package/jobs/load-balancer/algorithm/specify.js +14 -14
  56. package/jobs/load-balancer/algorithm/weights.js +21 -21
  57. package/jobs/load-balancer/algorithm/weightsMinimumConnection.js +29 -29
  58. package/jobs/load-balancer/algorithm/weightsPolling.js +22 -22
  59. package/jobs/load-balancer/algorithm/weightsRandom.js +16 -16
  60. package/jobs/load-balancer/consts.js +9 -9
  61. package/jobs/load-balancer/index.js +201 -201
  62. package/jobs/load-balancer/scheduler.js +31 -31
  63. package/jobs/renderer/index.js +141 -141
  64. package/jobs/renderer/loadView.js +40 -40
  65. package/jobs/unification.js +63 -63
  66. package/loader/index.js +172 -172
  67. package/log/index.js +68 -68
  68. package/log/logger.js +86 -80
  69. package/main/index.js +56 -56
  70. package/message/childMessage.js +54 -54
  71. package/message/index.js +18 -18
  72. package/old-utils/index.js +91 -91
  73. package/package.json +38 -38
  74. package/ps/index.js +371 -371
  75. package/services/baseContextClass.js +34 -34
  76. package/services/index.js +40 -40
  77. package/socket/httpServer.js +147 -147
  78. package/socket/index.js +81 -81
  79. package/socket/io.js +27 -27
  80. package/socket/ipcServer.js +112 -112
  81. package/socket/socketServer.js +69 -67
  82. package/storage/index.js +38 -38
  83. package/storage/jsondb/adapters/Base.js +23 -23
  84. package/storage/jsondb/adapters/FileSync.js +64 -52
  85. package/storage/jsondb/main.js +55 -42
  86. package/storage/jsondbStorage.js +195 -195
  87. package/storage/sqliteStorage.js +123 -123
  88. package/utils/co.js +237 -237
  89. package/utils/copyto.js +160 -160
  90. package/utils/depd/index.js +538 -538
  91. package/utils/depd/lib/browser/index.js +77 -77
  92. package/utils/extend.js +73 -73
  93. package/utils/get-port/index.d.ts +64 -64
  94. package/utils/get-port/index.js +148 -148
  95. package/utils/helper.js +220 -220
  96. package/utils/index.js +160 -160
  97. package/utils/ip.js +261 -261
  98. package/utils/is.js +145 -145
  99. package/utils/json.js +72 -72
  100. package/utils/pargv.js +263 -263
  101. package/utils/time/index.js +19 -19
  102. package/utils/time/ms.js +162 -162
  103. package/utils/wrap.js +35 -35
@@ -1,202 +1,202 @@
1
- const Consts = require("./consts");
2
- const Scheduler = require("./scheduler");
3
-
4
- /**
5
- * 负载均衡器
6
- * @intro 参考electron-re项目,并做了一些改动
7
- * @since 1.0.0
8
- */
9
- class LoadBalancer {
10
-
11
- static Algorithm = Consts;
12
-
13
- /**
14
- * @param {Object} options
15
- * @param {Array } options.targets [ targets for load balancing calculation: [{id: 1, weight: 1}, {id: 2, weight: 2}] ]
16
- * @param {String} options.algorithm
17
- */
18
- constructor(options) {
19
- this.targets = options.targets;
20
- this.algorithm = options.algorithm || Consts.polling;
21
- this.params = { // data for algorithm
22
- currentIndex: 0, // index
23
- weightIndex: 0, // index for weight alogrithm
24
- weightTotal: 0, // total weight
25
- connectionsMap: {}, // connections of each target
26
- cpuOccupancyMap: {}, // cpu occupancy of each target
27
- memoryOccupancyMap: {}, // cpu occupancy of each target
28
- };
29
- this.scheduler = new Scheduler(this.algorithm);
30
- this.memoParams = this.memorizedParams();
31
- this.calculateWeightIndex();
32
- }
33
-
34
- /**
35
- * 算法参数
36
- */
37
- memorizedParams() {
38
- return {
39
- [Consts.random]: () => [],
40
- [Consts.polling]: () => [this.params.currentIndex, this.params],
41
- [Consts.weights]: () => [this.params.weightTotal, this.params],
42
- [Consts.specify]: (id) => [id],
43
- [Consts.weightsRandom]: () => [this.params.weightTotal],
44
- [Consts.weightsPolling]: () => [this.params.weightIndex, this.params.weightTotal, this.params],
45
- [Consts.minimumConnection]: () => [this.params.connectionsMap],
46
- [Consts.weightsMinimumConnection]: () => [this.params.weightTotal, this.params.connectionsMap, this.params],
47
- };
48
- }
49
-
50
- /**
51
- * 刷新参数
52
- */
53
- refreshParams(pidMap) {
54
- const infos = Object.values(pidMap);
55
- for (let info of infos) {
56
- // this.params.connectionsMap[id] = connections;
57
- this.params.cpuOccupancyMap[info.pid] = info.cpu;
58
- this.params.memoryOccupancyMap[info.pid] = info.memory;
59
- }
60
- }
61
-
62
- /**
63
- * 选举出一个进程
64
- */
65
- pickOne(...params) {
66
- return this.scheduler.calculate(
67
- this.targets, this.memoParams[this.algorithm](...params)
68
- );
69
- }
70
-
71
- /**
72
- * 选举出多个进程
73
- */
74
- pickMulti(count = 1, ...params) {
75
- return new Array(count).fill().map(
76
- () => this.pickOne(...params)
77
- );
78
- }
79
-
80
- /**
81
- * 计算权重
82
- */
83
- calculateWeightIndex() {
84
- this.params.weightTotal = this.targets.reduce((total, cur) => total + (cur.weight || 0), 0);
85
- if (this.params.weightIndex > this.params.weightTotal) {
86
- this.params.weightIndex = this.params.weightTotal;
87
- }
88
- }
89
-
90
- /**
91
- * 计算索引
92
- */
93
- calculateIndex() {
94
- if (this.params.currentIndex >= this.targets.length) {
95
- this.params.currentIndex = (this.params.currentIndex - 1 >= 0) ? (this.params.currentIndex - 1) : 0;
96
- }
97
- }
98
-
99
- /**
100
- * 清除data
101
- */
102
- clean(id) {
103
- if (id) {
104
- delete this.params.connectionsMap[id];
105
- delete this.params.cpuOccupancyMap[id];
106
- delete this.params.memoryOccupancyMap[id];
107
- } else {
108
- this.params = {
109
- currentIndex: 0,
110
- connectionsMap: {},
111
- cpuOccupancyMap: {},
112
- memoryOccupancyMap: {},
113
- };
114
- }
115
- }
116
-
117
- /**
118
- * 添加一个进程信息
119
- */
120
- add(task) {
121
- if (this.targets.find(target => target.id === task.id)) {
122
- return console.warn(`Add Operation: the task ${task.id} already exists.`);
123
- }
124
- this.targets.push(task);
125
- this.calculateWeightIndex();
126
- }
127
-
128
- /**
129
- * 删除一个进程信息
130
- */
131
- del(target) {
132
- let found = false;
133
- for (let i = 0; i < this.targets.length; i++) {
134
- if (this.targets[i].id === target.id) {
135
- this.targets.splice(i, 1);
136
- this.clean(target.id);
137
- this.calculateIndex();
138
- found = true;
139
- break;
140
- }
141
- }
142
-
143
- if (found) {
144
- this.calculateWeightIndex();
145
- } else {
146
- console.warn(`Del Operation: the task ${target.id} is not found.`, this.targets);
147
- }
148
- }
149
-
150
- /**
151
- * 擦除
152
- */
153
- wipe() {
154
- this.targets = [];
155
- this.calculateWeightIndex();
156
- this.clean();
157
- }
158
-
159
- /**
160
- * 更新计算参数
161
- */
162
- updateParams(object) {
163
- Object.entries(object).map(([key, value]) => {
164
- if (key in this.params) {
165
- this.params[key] = value;
166
- }
167
- });
168
- }
169
-
170
- /**
171
- * 设置targets
172
- */
173
- setTargets(targets) {
174
- const targetsMap = targets.reduce((total, cur) => {
175
- total[cur.id] = 1;
176
- return total;
177
- }, {});
178
- this.targets.forEach(target => {
179
- if (!(target.id in targetsMap)) {
180
- this.clean(target.id);
181
- this.calculateIndex();
182
- }
183
- });
184
- this.targets = targets;
185
- this.calculateWeightIndex();
186
- }
187
-
188
- /**
189
- * 设置算法
190
- */
191
- setAlgorithm = (algorithm) => {
192
- if (algorithm in Consts) {
193
- this.algorithm = algorithm;
194
- this.params.weightIndex = 0;
195
- this.scheduler.setAlgorithm(this.algorithm);
196
- } else {
197
- throw new Error(`Invalid algorithm: ${algorithm}, pick from ${Object.keys(Consts).join('|')}`);
198
- }
199
- }
200
- }
201
-
1
+ const Consts = require("./consts");
2
+ const Scheduler = require("./scheduler");
3
+
4
+ /**
5
+ * 负载均衡器
6
+ * @intro 参考electron-re项目,并做了一些改动
7
+ * @since 1.0.0
8
+ */
9
+ class LoadBalancer {
10
+
11
+ static Algorithm = Consts;
12
+
13
+ /**
14
+ * @param {Object} options
15
+ * @param {Array } options.targets [ targets for load balancing calculation: [{id: 1, weight: 1}, {id: 2, weight: 2}] ]
16
+ * @param {String} options.algorithm
17
+ */
18
+ constructor(options) {
19
+ this.targets = options.targets;
20
+ this.algorithm = options.algorithm || Consts.polling;
21
+ this.params = { // data for algorithm
22
+ currentIndex: 0, // index
23
+ weightIndex: 0, // index for weight alogrithm
24
+ weightTotal: 0, // total weight
25
+ connectionsMap: {}, // connections of each target
26
+ cpuOccupancyMap: {}, // cpu occupancy of each target
27
+ memoryOccupancyMap: {}, // cpu occupancy of each target
28
+ };
29
+ this.scheduler = new Scheduler(this.algorithm);
30
+ this.memoParams = this.memorizedParams();
31
+ this.calculateWeightIndex();
32
+ }
33
+
34
+ /**
35
+ * 算法参数
36
+ */
37
+ memorizedParams() {
38
+ return {
39
+ [Consts.random]: () => [],
40
+ [Consts.polling]: () => [this.params.currentIndex, this.params],
41
+ [Consts.weights]: () => [this.params.weightTotal, this.params],
42
+ [Consts.specify]: (id) => [id],
43
+ [Consts.weightsRandom]: () => [this.params.weightTotal],
44
+ [Consts.weightsPolling]: () => [this.params.weightIndex, this.params.weightTotal, this.params],
45
+ [Consts.minimumConnection]: () => [this.params.connectionsMap],
46
+ [Consts.weightsMinimumConnection]: () => [this.params.weightTotal, this.params.connectionsMap, this.params],
47
+ };
48
+ }
49
+
50
+ /**
51
+ * 刷新参数
52
+ */
53
+ refreshParams(pidMap) {
54
+ const infos = Object.values(pidMap);
55
+ for (let info of infos) {
56
+ // this.params.connectionsMap[id] = connections;
57
+ this.params.cpuOccupancyMap[info.pid] = info.cpu;
58
+ this.params.memoryOccupancyMap[info.pid] = info.memory;
59
+ }
60
+ }
61
+
62
+ /**
63
+ * 选举出一个进程
64
+ */
65
+ pickOne(...params) {
66
+ return this.scheduler.calculate(
67
+ this.targets, this.memoParams[this.algorithm](...params)
68
+ );
69
+ }
70
+
71
+ /**
72
+ * 选举出多个进程
73
+ */
74
+ pickMulti(count = 1, ...params) {
75
+ return new Array(count).fill().map(
76
+ () => this.pickOne(...params)
77
+ );
78
+ }
79
+
80
+ /**
81
+ * 计算权重
82
+ */
83
+ calculateWeightIndex() {
84
+ this.params.weightTotal = this.targets.reduce((total, cur) => total + (cur.weight || 0), 0);
85
+ if (this.params.weightIndex > this.params.weightTotal) {
86
+ this.params.weightIndex = this.params.weightTotal;
87
+ }
88
+ }
89
+
90
+ /**
91
+ * 计算索引
92
+ */
93
+ calculateIndex() {
94
+ if (this.params.currentIndex >= this.targets.length) {
95
+ this.params.currentIndex = (this.params.currentIndex - 1 >= 0) ? (this.params.currentIndex - 1) : 0;
96
+ }
97
+ }
98
+
99
+ /**
100
+ * 清除data
101
+ */
102
+ clean(id) {
103
+ if (id) {
104
+ delete this.params.connectionsMap[id];
105
+ delete this.params.cpuOccupancyMap[id];
106
+ delete this.params.memoryOccupancyMap[id];
107
+ } else {
108
+ this.params = {
109
+ currentIndex: 0,
110
+ connectionsMap: {},
111
+ cpuOccupancyMap: {},
112
+ memoryOccupancyMap: {},
113
+ };
114
+ }
115
+ }
116
+
117
+ /**
118
+ * 添加一个进程信息
119
+ */
120
+ add(task) {
121
+ if (this.targets.find(target => target.id === task.id)) {
122
+ return console.warn(`Add Operation: the task ${task.id} already exists.`);
123
+ }
124
+ this.targets.push(task);
125
+ this.calculateWeightIndex();
126
+ }
127
+
128
+ /**
129
+ * 删除一个进程信息
130
+ */
131
+ del(target) {
132
+ let found = false;
133
+ for (let i = 0; i < this.targets.length; i++) {
134
+ if (this.targets[i].id === target.id) {
135
+ this.targets.splice(i, 1);
136
+ this.clean(target.id);
137
+ this.calculateIndex();
138
+ found = true;
139
+ break;
140
+ }
141
+ }
142
+
143
+ if (found) {
144
+ this.calculateWeightIndex();
145
+ } else {
146
+ console.warn(`Del Operation: the task ${target.id} is not found.`, this.targets);
147
+ }
148
+ }
149
+
150
+ /**
151
+ * 擦除
152
+ */
153
+ wipe() {
154
+ this.targets = [];
155
+ this.calculateWeightIndex();
156
+ this.clean();
157
+ }
158
+
159
+ /**
160
+ * 更新计算参数
161
+ */
162
+ updateParams(object) {
163
+ Object.entries(object).map(([key, value]) => {
164
+ if (key in this.params) {
165
+ this.params[key] = value;
166
+ }
167
+ });
168
+ }
169
+
170
+ /**
171
+ * 设置targets
172
+ */
173
+ setTargets(targets) {
174
+ const targetsMap = targets.reduce((total, cur) => {
175
+ total[cur.id] = 1;
176
+ return total;
177
+ }, {});
178
+ this.targets.forEach(target => {
179
+ if (!(target.id in targetsMap)) {
180
+ this.clean(target.id);
181
+ this.calculateIndex();
182
+ }
183
+ });
184
+ this.targets = targets;
185
+ this.calculateWeightIndex();
186
+ }
187
+
188
+ /**
189
+ * 设置算法
190
+ */
191
+ setAlgorithm = (algorithm) => {
192
+ if (algorithm in Consts) {
193
+ this.algorithm = algorithm;
194
+ this.params.weightIndex = 0;
195
+ this.scheduler.setAlgorithm(this.algorithm);
196
+ } else {
197
+ throw new Error(`Invalid algorithm: ${algorithm}, pick from ${Object.keys(Consts).join('|')}`);
198
+ }
199
+ }
200
+ }
201
+
202
202
  module.exports = LoadBalancer;
@@ -1,32 +1,32 @@
1
- const Consts = require("./consts");
2
- const algorithm = require('./algorithm');
3
-
4
- /**
5
- * 算法调度器
6
- */
7
- class Scheduler {
8
- constructor(algorithm) {
9
- this.algorithm = algorithm || Consts.polling;
10
- }
11
-
12
- /**
13
- * 计算
14
- */
15
- calculate(tasks, params) {
16
- const results = algorithm[this.algorithm](tasks, ...params);
17
- return results;
18
- }
19
-
20
- /**
21
- * 设置算法
22
- */
23
- setAlgorithm = (algorithm) => {
24
- if (algorithm in Consts) {
25
- this.algorithm = algorithm;
26
- } else {
27
- throw new Error(`Invalid algorithm: ${algorithm}, pick from ${Object.keys(Consts).join('|')}`);
28
- }
29
- }
30
- }
31
-
1
+ const Consts = require("./consts");
2
+ const algorithm = require('./algorithm');
3
+
4
+ /**
5
+ * 算法调度器
6
+ */
7
+ class Scheduler {
8
+ constructor(algorithm) {
9
+ this.algorithm = algorithm || Consts.polling;
10
+ }
11
+
12
+ /**
13
+ * 计算
14
+ */
15
+ calculate(tasks, params) {
16
+ const results = algorithm[this.algorithm](tasks, ...params);
17
+ return results;
18
+ }
19
+
20
+ /**
21
+ * 设置算法
22
+ */
23
+ setAlgorithm = (algorithm) => {
24
+ if (algorithm in Consts) {
25
+ this.algorithm = algorithm;
26
+ } else {
27
+ throw new Error(`Invalid algorithm: ${algorithm}, pick from ${Object.keys(Consts).join('|')}`);
28
+ }
29
+ }
30
+ }
31
+
32
32
  module.exports = Scheduler;