Skip to content

Commit 839d475

Browse files
committed
update
1 parent 488cac8 commit 839d475

11 files changed

Lines changed: 602 additions & 73 deletions

File tree

JobPCA/.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

JobPCA/.idea/workspace.xml

Lines changed: 42 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

JobPCA/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@
266266

267267
<script src="https://cdn.rawgit.com/eligrey/canvas-toBlob.js/f1a01896135ab378aa5c0118eadd81da55e698d8/canvas-toBlob.js"></script>
268268
<script src="https://cdn.rawgit.com/eligrey/FileSaver.js/e9d941381475b5df8b7d7691013401e171014e89/FileSaver.min.js"></script>
269+
<script src="https://cdnjs.cloudflare.com/ajax/libs/pako/2.1.0/pako.min.js" integrity="sha512-g2TeAWw5GPnX7z0Kn8nFbYfeHcvAu/tx6d6mrLe/90mkCxO+RcptyYpksUz35EO337F83bZwcmUyHiHamspkfg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
269270
<script src="src/js/ulti.js"></script>
270271
<script src="src/lib/radarChart.js"></script>
271272
<script src="src/js/loadShap.js"></script>

JobPCA/src/data/nocona_2023-05-01-2023-05-03.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

JobPCA/src/data/nocona_2023-05-01-2023-05-07.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

JobPCA/src/js/loadDataByUser.js

Lines changed: 87 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,41 @@ function handleDatabyUser(url,callBack){
1818
const userDict={};
1919
const userReverseDict={};
2020
d3.json(url).then(_data=>{
21-
d3.keys(_data.jobs_info).forEach(jID=>{if (!userDict[_data.jobs_info[jID].user_name] && !userReverseDict[_data.jobs_info[jID].user_name]){
22-
const encoded = 'user'+d3.keys(userDict).length;
23-
userDict[_data.jobs_info[jID].user_name] = encoded;
24-
userReverseDict[encoded] = _data.jobs_info[jID].user_name;
25-
_data.jobs_info[jID].user_name = userDict[_data.jobs_info[jID].user_name];
26-
}else if (!userReverseDict[_data.jobs_info[jID].user_name]){
27-
_data.jobs_info[jID].user_name = userDict[_data.jobs_info[jID].user_name];
28-
}if (!userDict[_data.jobs_info[jID].user_name])
29-
userDict[_data.jobs_info[jID].user_name] = 'user'+d3.keys(userDict).length;
30-
_data.jobs_info[jID].user_name = userDict[_data.jobs_info[jID].user_name];
31-
_data.jobs_info[jID].node_list = _data.jobs_info[jID].node_list.map(c=>c.split('-')[0]);
32-
});
21+
if (_data.jobs_info && _data.jobs_info["base64(zip(o))"]){
22+
Object.keys(_data).forEach(k=>{
23+
if (_data[k]["base64(zip(o))"]){
24+
_data[k] = JSON.parse(pako.inflate(base64ToBuffer(_data[k]['base64(zip(o))']), { to: 'string' }));
25+
}
26+
})
27+
}
28+
else if (_data["base64(zip(o))"]){
29+
_data = JSON.parse(pako.inflate(base64ToBuffer(_data['base64(zip(o))']), { to: 'string' }));
30+
}
31+
// fill in
32+
Object.keys(_data[COMPUTE]).forEach(comp=>{
33+
if (!_data[COMPUTE][comp].job_id)
34+
_data[COMPUTE][comp].job_id = [];
35+
else
36+
_data[COMPUTE][comp].job_id = _data[COMPUTE][comp].job_id.map(j=>(j??[]).map(jid=>''+jid));
37+
})
38+
39+
d3.keys(_data.jobs_info).forEach(jID=>{
40+
_data.jobs_info[jID].finish_time = _data.jobs_info[jID].finish_time??_data.jobs_info[jID].end_time;
41+
_data.jobs_info[jID].job_name = ''+(_data.jobs_info[jID].job_name??_data.jobs_info[jID].name);
42+
if (!userDict[_data.jobs_info[jID].user_name] && !userReverseDict[_data.jobs_info[jID].user_name]){
43+
const encoded = 'user'+d3.keys(userDict).length;
44+
userDict[_data.jobs_info[jID].user_name] = encoded;
45+
userReverseDict[encoded] = _data.jobs_info[jID].user_name;
46+
_data.jobs_info[jID].user_name = userDict[_data.jobs_info[jID].user_name];
47+
}else if (!userReverseDict[_data.jobs_info[jID].user_name]){
48+
_data.jobs_info[jID].user_name = userDict[_data.jobs_info[jID].user_name];
49+
}if (!userDict[_data.jobs_info[jID].user_name])
50+
userDict[_data.jobs_info[jID].user_name] = 'user'+d3.keys(userDict).length;
51+
_data.jobs_info[jID].user_name = userDict[_data.jobs_info[jID].user_name];
52+
// _data.jobs_info[jID].node_list = (_data.jobs_info[jID].node_list??_data.jobs_info[jID].nodes??[]).map(c=>c.split('-')[0]); //slip old
53+
_data.jobs_info[jID].node_list = (_data.jobs_info[jID].node_list??[]).slice();
54+
}
55+
);
3356

3457

3558
const dataurl = handleDataUrl(_data);
@@ -73,21 +96,25 @@ function summaryByUser(data) {
7396
const users = {};
7497
Object.keys(data[COMPUTE]).forEach(comp => {
7598
data.time_stamp.forEach((t, ti) => {
76-
data[COMPUTE][comp].job_id[ti].forEach(jid => {
77-
if (data[JOB][jid].finish_time && (data[JOB][jid].start_time>=(data.time_stamp[0]/1000000))){
78-
const user_name = data[JOB][jid].user_name;
79-
if (!users[user_name]) {
80-
users[user_name] = {id: user_name, comps: {}, time: {},value:{job:{}}, values: []}
81-
}
82-
users[user_name].value.job[jid]=data[JOB][jid];
83-
if (!users[user_name].comps[comp]) {
84-
users[user_name].comps[comp] = [];
85-
}
86-
if (!users[user_name].comps[comp][ti]) {
87-
users[user_name].values.push(tsnedata[comp][ti])
88-
users[user_name].comps[comp][ti] = tsnedata[comp][ti];
89-
users[user_name].time[ti] = true;
99+
(data[COMPUTE][comp].job_id[ti]??[]).forEach(jid => {
100+
try {
101+
if (data[JOB][jid].finish_time && (data[JOB][jid].start_time >= (data.time_stamp[0] / 1000000))) {
102+
const user_name = data[JOB][jid].user_name;
103+
if (!users[user_name]) {
104+
users[user_name] = {id: user_name, comps: {}, time: {}, value: {job: {}}, values: []}
105+
}
106+
users[user_name].value.job[jid] = data[JOB][jid];
107+
if (!users[user_name].comps[comp]) {
108+
users[user_name].comps[comp] = [];
109+
}
110+
if (!users[user_name].comps[comp][ti]) {
111+
users[user_name].values.push(tsnedata[comp][ti])
112+
users[user_name].comps[comp][ti] = tsnedata[comp][ti];
113+
users[user_name].time[ti] = true;
114+
}
90115
}
116+
}catch (e){
117+
// missing job info
91118
}
92119
});
93120
});
@@ -112,39 +139,48 @@ function summaryByJob(data) {
112139
const nodes = {};
113140
const user = {};
114141
const node_jobs = {};
142+
const missingJoblist = {};
115143
Object.keys(data[COMPUTE]).forEach(comp => {
116144
data.time_stamp.forEach((t, ti) => {
117-
data[COMPUTE][comp].job_id[ti].forEach(jid => {
118-
if (data[JOB][jid].finish_time && (data[JOB][jid].start_time>=(data.time_stamp[0]/1000000))) {
119-
// const jobID_Main = jid.split('.')[0];
120-
const jobID_Main = data[JOB][jid].job_name.split('batch')[0]+'||'+data[JOB][jid].user_name;
121-
if (!user[data[JOB][jid].user_name])
122-
user[data[JOB][jid].user_name] = {};
123-
if (!user[data[JOB][jid].user_name][jobID_Main])
124-
user[data[JOB][jid].user_name][jobID_Main] = {job:{}};
125-
user[data[JOB][jid].user_name][jobID_Main].job[jid] = data[JOB][jid];
126-
if (!jobs[jobID_Main]) {
127-
jobs[jobID_Main] = {id: jobID_Main, comps: {}, time: {}, values: []}
128-
}
129-
if (!jobs[jobID_Main].comps[comp]) {
130-
jobs[jobID_Main].comps[comp] = [];
131-
nodes[comp+'||'+jobID_Main] = {id: comp+'||'+jobID_Main, job:jobID_Main,time: {}, values: []};
132-
node_jobs[comp+'||'+jobID_Main]={};
133-
}
134-
node_jobs[comp+'||'+jobID_Main][jid.split('.')[0]] = 1;
135-
if (!jobs[jobID_Main].comps[comp][ti]) {
136-
jobs[jobID_Main].values.push(tsnedata[comp][ti]);
137-
jobs[jobID_Main].comps[comp][ti] = tsnedata[comp][ti];
138-
jobs[jobID_Main].time[ti] = true;
145+
(data[COMPUTE][comp].job_id[ti]??[]).forEach(jid => {
146+
try {
147+
if (data[JOB][jid].finish_time && (data[JOB][jid].start_time >= (data.time_stamp[0] / 1000000))) {
148+
// const jobID_Main = jid.split('.')[0];
149+
const jobID_Main = data[JOB][jid].job_name.split('batch')[0] + '||' + data[JOB][jid].user_name;
150+
if (!user[data[JOB][jid].user_name])
151+
user[data[JOB][jid].user_name] = {};
152+
if (!user[data[JOB][jid].user_name][jobID_Main])
153+
user[data[JOB][jid].user_name][jobID_Main] = {job: {}};
154+
user[data[JOB][jid].user_name][jobID_Main].job[jid] = data[JOB][jid];
155+
if (!jobs[jobID_Main]) {
156+
jobs[jobID_Main] = {id: jobID_Main, comps: {}, time: {}, values: []}
157+
}
158+
if (!jobs[jobID_Main].comps[comp]) {
159+
jobs[jobID_Main].comps[comp] = [];
160+
nodes[comp + '||' + jobID_Main] = {
161+
id: comp + '||' + jobID_Main,
162+
job: jobID_Main,
163+
time: {},
164+
values: []
165+
};
166+
node_jobs[comp + '||' + jobID_Main] = {};
167+
}
168+
node_jobs[comp + '||' + jobID_Main][jid.split('.')[0]] = 1;
169+
if (!jobs[jobID_Main].comps[comp][ti]) {
170+
jobs[jobID_Main].values.push(tsnedata[comp][ti]);
171+
jobs[jobID_Main].comps[comp][ti] = tsnedata[comp][ti];
172+
jobs[jobID_Main].time[ti] = true;
139173

140-
nodes[comp+'||'+jobID_Main].values.push(tsnedata[comp][ti]);
141-
nodes[comp+'||'+jobID_Main].time[ti] = true;
174+
nodes[comp + '||' + jobID_Main].values.push(tsnedata[comp][ti]);
175+
nodes[comp + '||' + jobID_Main].time[ti] = true;
176+
}
142177
}
178+
}catch (e){
179+
missingJoblist[jid] = [comp,ti]
143180
}
144181
});
145182
});
146183
});
147-
148184
let blackList = {};
149185
let topUser = Object.keys(user).map(k=>({user:k,jobs:Object.keys(user[k]).length})).sort((a,b)=>b.jobs-a.jobs).slice(0,5);
150186
topUser

JobPCA/src/js/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ $(document).ready(function(){
2323
// request = new LoadShap('src/data/shap_username.csv');
2424

2525
handleDatabyUser('../HiperView/data/814_821_2020.json',(data)=>{
26+
// handleDatabyUser('src/data/nocona_2023-05-01-2023-05-03.json',(data)=>{
2627
request = new LoadShap(new Promise((resolutionFunc)=>resolutionFunc(data)));
2728
initMenu();
2829
initClusterUI();
2930
initdraw();
3031
request.onFinishQuery.push(queryData);
3132
request.onDataChange.push(request.request.bind(request))
3233
})
33-
debugger
3434

3535
// initMenu();
3636
// initClusterUI();

JobPCA/src/js/setting.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ function TTUsetting(){
88
alternative_service = ["cpu_inl_temp", "memory_usage", "fan_speed", "power_usage"];
99
alternative_scale = [1,1,1,0.5];
1010
}
11+
1112
let colorScaleList = {
1213
n: 7,
1314
rainbow: ["#000066", "#4400ff", "#00ddff", "#00ddaa", "#00dd00", "#aadd00", "#ffcc00", "#ff8800", "#ff0000", "#660000"],
@@ -85,6 +86,8 @@ function handleDataUrl(dataRaw) {
8586
var scale = alternative_scale[si];
8687
sampleh.timespan.forEach((dt, ti) => {
8788
let value = [];
89+
if (!data[h.ip][sa])
90+
data[h.ip][sa] = [];
8891
if (!_.isArray(data[h.ip][sa][ti])){
8992
data[h.ip][sa][ti] = [data[h.ip][sa][ti]]
9093
}

0 commit comments

Comments
 (0)