const channelsResponse = [
{
id: 372,
name: 'Channel 01',
lab: 'Fullerton',
tests: [3, 4, 7, 8],
},
{
id: 373,
name: 'Channel 02',
lab: 'Fullerton',
tests: [1, 2, 5, 6],
},
{
id: 374,
name: 'Beta Channel',
lab: 'Fullerton',
tests: [],
},
{
id: 472,
name: 'Channel 01',
lab: 'Queens',
tests: [9, 11, 12, 13],
},
{
id: 473,
name: 'Channel 02',
lab: 'Queens',
tests: [15, 17, 19],
},
{
id: 474,
name: 'Channel 03',
lab: 'Queens',
tests: [21, 22, 24, 25],
},
{
id: 475,
name: 'Channel 04',
lab: 'Queens',
tests: [26, 27, 28, 29, 30],
},
];
const testsResponse = [
{
id: 1,
start: '2019-11-05T11:05:00Z',
end: '2019-11-05T13:05:00Z',
},
{
id: 2,
start: '2019-11-06T11:05:00Z',
end: '2019-11-06T13:05:00Z',
},
{
id: 3,
start: '2019-11-04T11:05:00Z',
end: '2019-11-04T13:09:00Z',
},
{
id: 4,
start: '2019-11-04T17:00:00Z',
end: '2019-11-05T09:32:00Z',
},
{
id: 5,
start: '2019-11-11T11:05:00Z',
end: '2019-11-12T13:05:00Z',
},
{
id: 6,
start: '2019-11-12T14:05:00Z',
end: '2019-11-15T13:05:00Z',
},
{
id: 7,
start: '2019-11-07T11:05:00Z',
end: '2019-11-08T13:05:00Z',
},
{
id: 8,
start: '2019-11-08T15:05:00Z',
end: '2019-11-08T15:35:00Z',
},
{
id: 9,
start: '2019-11-05T09:05:00Z',
end: '2019-11-08T12:05:00Z',
},
{
id: 11,
start: '2019-11-08T12:35:00Z',
end: '2019-11-08T13:35:00Z',
},
{
id: 12,
start: '2019-11-08T17:00:00Z',
end: '2019-11-11T10:00:00Z',
},
{
id: 13,
start: '2019-11-11T12:00:00Z',
end: null,
},
{id: 15},
{
id: 17,
start: '2019-11-05T17:00:00Z',
end: '2019-11-06T10:00:00Z',
},
{
id: 19,
start: '2019-11-06T12:00:00Z',
end: '2019-11-06T13:22:00Z',
},
{
id: 21,
start: '2019-11-05T09:05:00Z',
end: '2019-11-06T12:05:00Z',
},
{
id: 22,
start: '2019-11-08T12:35:00Z',
end: '2019-11-08T13:35:00Z',
},
{
id: 24,
start: '2019-11-11T17:00:00Z',
end: '2019-11-15T10:00:00Z',
},
{
id: 25,
start: '2019-11-15T12:00:00Z',
},
{
id: 26,
start: '2019-11-05T09:05:00Z',
end: '2019-11-06T12:05:00Z',
},
{
id: 27,
start: '2019-11-07T12:35:00Z',
end: '2019-11-07T13:35:00Z',
},
{
id: 28,
start: '2019-11-08T17:00:00Z',
end: '2019-11-11T10:00:00Z',
},
{
id: 29,
start: '2019-11-12T12:00:00Z',
end: '2019-11-12T14:00:00Z',
},
{
id: 30,
start: '2019-11-13T12:00:00Z',
end: '2019-11-13T14:00:00Z',
},
];
const expectedChannelUtilizations = [
{
date: '2019-11-04T00:00:00.000Z',
utilizationPercentage: 14,
},
{
date: '2019-11-05T00:00:00.000Z',
utilizationPercentage: 86,
},
{
date: '2019-11-06T00:00:00.000Z',
utilizationPercentage: 71,
},
{
date: '2019-11-07T00:00:00.000Z',
utilizationPercentage: 43,
},
{
date: '2019-11-08T00:00:00.000Z',
utilizationPercentage: 57,
},
{
date: '2019-11-09T00:00:00.000Z',
utilizationPercentage: 29,
},
{
date: '2019-11-10T00:00:00.000Z',
utilizationPercentage: 29,
},
{
date: '2019-11-11T00:00:00.000Z',
utilizationPercentage: 57,
},
{
date: '2019-11-12T00:00:00.000Z',
utilizationPercentage: 57,
},
{
date: '2019-11-13T00:00:00.000Z',
utilizationPercentage: 57,
},
{
date: '2019-11-14T00:00:00.000Z',
utilizationPercentage: 43,
},
{
date: '2019-11-15T00:00:00.000Z',
utilizationPercentage: 43,
},
];
function cl(data) { console.log(JSON.stringify(data)); }
// channelsResponse & testsResponse
const getThem = () => {
let max='';
let min=new Date().toISOString();
testsResponse.forEach(test => {
min=test.start && min.localeCompare(test.start)>0?test.start:min;
max=test.end && max.localeCompare(test.end)<0?test.end:max;
});
min=new Date(min.substr(0,10)+'T00:00:00.000Z');
max=new Date(max.substr(0,10)+'T00:00:00.000Z');
let results = [];
for(var i=min; i<=max; i.setDate(i.getDate()+1)) {
let p=0;
let d=i.toISOString().substr(0,10);
const testIds = testsResponse.filter(t => d.localeCompare((t.start+'').substr(0,10))>=0 && d.localeCompare((t.end+'').substr(0,10))<=0).map(t => t.id);
const channels = channelsResponse.filter(c => c.tests.some(t => testIds.includes(t)));
p=Math.round(channels.length*100.0/channelsResponse.length);
results.push({date: i.toISOString(), utilizationPercentage: p})
}
return results;
};
cl(getThem());
Y29uc3QgY2hhbm5lbHNSZXNwb25zZSA9IFsKICAgIHsKICAgICAgICBpZDogMzcyLAogICAgICAgIG5hbWU6ICdDaGFubmVsIDAxJywKICAgICAgICBsYWI6ICdGdWxsZXJ0b24nLAogICAgICAgIHRlc3RzOiBbMywgNCwgNywgOF0sCiAgICB9LAogICAgewogICAgICAgIGlkOiAzNzMsCiAgICAgICAgbmFtZTogJ0NoYW5uZWwgMDInLAogICAgICAgIGxhYjogJ0Z1bGxlcnRvbicsCiAgICAgICAgdGVzdHM6IFsxLCAyLCA1LCA2XSwKICAgIH0sCiAgICB7CiAgICAgICAgaWQ6IDM3NCwKICAgICAgICBuYW1lOiAnQmV0YSBDaGFubmVsJywKICAgICAgICBsYWI6ICdGdWxsZXJ0b24nLAogICAgICAgIHRlc3RzOiBbXSwKICAgIH0sCiAgICB7CiAgICAgICAgaWQ6IDQ3MiwKICAgICAgICBuYW1lOiAnQ2hhbm5lbCAwMScsCiAgICAgICAgbGFiOiAnUXVlZW5zJywKICAgICAgICB0ZXN0czogWzksIDExLCAxMiwgMTNdLAogICAgfSwKICAgIHsKICAgICAgICBpZDogNDczLAogICAgICAgIG5hbWU6ICdDaGFubmVsIDAyJywKICAgICAgICBsYWI6ICdRdWVlbnMnLAogICAgICAgIHRlc3RzOiBbMTUsIDE3LCAxOV0sCiAgICB9LAogICAgewogICAgICAgIGlkOiA0NzQsCiAgICAgICAgbmFtZTogJ0NoYW5uZWwgMDMnLAogICAgICAgIGxhYjogJ1F1ZWVucycsCiAgICAgICAgdGVzdHM6IFsyMSwgMjIsIDI0LCAyNV0sCiAgICB9LAogICAgewogICAgICAgIGlkOiA0NzUsCiAgICAgICAgbmFtZTogJ0NoYW5uZWwgMDQnLAogICAgICAgIGxhYjogJ1F1ZWVucycsCiAgICAgICAgdGVzdHM6IFsyNiwgMjcsIDI4LCAyOSwgMzBdLAogICAgfSwKXTsKCmNvbnN0IHRlc3RzUmVzcG9uc2UgPSBbCiAgICB7CiAgICAgICAgaWQ6IDEsCiAgICAgICAgc3RhcnQ6ICcyMDE5LTExLTA1VDExOjA1OjAwWicsCiAgICAgICAgZW5kOiAnMjAxOS0xMS0wNVQxMzowNTowMFonLAogICAgfSwKICAgIHsKICAgICAgICBpZDogMiwKICAgICAgICBzdGFydDogJzIwMTktMTEtMDZUMTE6MDU6MDBaJywKICAgICAgICBlbmQ6ICcyMDE5LTExLTA2VDEzOjA1OjAwWicsCiAgICB9LAogICAgewogICAgICAgIGlkOiAzLAogICAgICAgIHN0YXJ0OiAnMjAxOS0xMS0wNFQxMTowNTowMFonLAogICAgICAgIGVuZDogJzIwMTktMTEtMDRUMTM6MDk6MDBaJywKICAgIH0sCiAgICB7CiAgICAgICAgaWQ6IDQsCiAgICAgICAgc3RhcnQ6ICcyMDE5LTExLTA0VDE3OjAwOjAwWicsCiAgICAgICAgZW5kOiAnMjAxOS0xMS0wNVQwOTozMjowMFonLAogICAgfSwKICAgIHsKICAgICAgICBpZDogNSwKICAgICAgICBzdGFydDogJzIwMTktMTEtMTFUMTE6MDU6MDBaJywKICAgICAgICBlbmQ6ICcyMDE5LTExLTEyVDEzOjA1OjAwWicsCiAgICB9LAogICAgewogICAgICAgIGlkOiA2LAogICAgICAgIHN0YXJ0OiAnMjAxOS0xMS0xMlQxNDowNTowMFonLAogICAgICAgIGVuZDogJzIwMTktMTEtMTVUMTM6MDU6MDBaJywKICAgIH0sCiAgICB7CiAgICAgICAgaWQ6IDcsCiAgICAgICAgc3RhcnQ6ICcyMDE5LTExLTA3VDExOjA1OjAwWicsCiAgICAgICAgZW5kOiAnMjAxOS0xMS0wOFQxMzowNTowMFonLAogICAgfSwKICAgIHsKICAgICAgICBpZDogOCwKICAgICAgICBzdGFydDogJzIwMTktMTEtMDhUMTU6MDU6MDBaJywKICAgICAgICBlbmQ6ICcyMDE5LTExLTA4VDE1OjM1OjAwWicsCiAgICB9LAogICAgewogICAgICAgIGlkOiA5LAogICAgICAgIHN0YXJ0OiAnMjAxOS0xMS0wNVQwOTowNTowMFonLAogICAgICAgIGVuZDogJzIwMTktMTEtMDhUMTI6MDU6MDBaJywKICAgIH0sCiAgICB7CiAgICAgICAgaWQ6IDExLAogICAgICAgIHN0YXJ0OiAnMjAxOS0xMS0wOFQxMjozNTowMFonLAogICAgICAgIGVuZDogJzIwMTktMTEtMDhUMTM6MzU6MDBaJywKICAgIH0sCiAgICB7CiAgICAgICAgaWQ6IDEyLAogICAgICAgIHN0YXJ0OiAnMjAxOS0xMS0wOFQxNzowMDowMFonLAogICAgICAgIGVuZDogJzIwMTktMTEtMTFUMTA6MDA6MDBaJywKICAgIH0sCiAgICB7CiAgICAgICAgaWQ6IDEzLAogICAgICAgIHN0YXJ0OiAnMjAxOS0xMS0xMVQxMjowMDowMFonLAogICAgICAgIGVuZDogbnVsbCwKICAgIH0sCiAgICB7aWQ6IDE1fSwKICAgIHsKICAgICAgICBpZDogMTcsCiAgICAgICAgc3RhcnQ6ICcyMDE5LTExLTA1VDE3OjAwOjAwWicsCiAgICAgICAgZW5kOiAnMjAxOS0xMS0wNlQxMDowMDowMFonLAogICAgfSwKICAgIHsKICAgICAgICBpZDogMTksCiAgICAgICAgc3RhcnQ6ICcyMDE5LTExLTA2VDEyOjAwOjAwWicsCiAgICAgICAgZW5kOiAnMjAxOS0xMS0wNlQxMzoyMjowMFonLAogICAgfSwKICAgIHsKICAgICAgICBpZDogMjEsCiAgICAgICAgc3RhcnQ6ICcyMDE5LTExLTA1VDA5OjA1OjAwWicsCiAgICAgICAgZW5kOiAnMjAxOS0xMS0wNlQxMjowNTowMFonLAogICAgfSwKICAgIHsKICAgICAgICBpZDogMjIsCiAgICAgICAgc3RhcnQ6ICcyMDE5LTExLTA4VDEyOjM1OjAwWicsCiAgICAgICAgZW5kOiAnMjAxOS0xMS0wOFQxMzozNTowMFonLAogICAgfSwKICAgIHsKICAgICAgICBpZDogMjQsCiAgICAgICAgc3RhcnQ6ICcyMDE5LTExLTExVDE3OjAwOjAwWicsCiAgICAgICAgZW5kOiAnMjAxOS0xMS0xNVQxMDowMDowMFonLAogICAgfSwKICAgIHsKICAgICAgICBpZDogMjUsCiAgICAgICAgc3RhcnQ6ICcyMDE5LTExLTE1VDEyOjAwOjAwWicsCiAgICB9LAogICAgewogICAgICAgIGlkOiAyNiwKICAgICAgICBzdGFydDogJzIwMTktMTEtMDVUMDk6MDU6MDBaJywKICAgICAgICBlbmQ6ICcyMDE5LTExLTA2VDEyOjA1OjAwWicsCiAgICB9LAogICAgewogICAgICAgIGlkOiAyNywKICAgICAgICBzdGFydDogJzIwMTktMTEtMDdUMTI6MzU6MDBaJywKICAgICAgICBlbmQ6ICcyMDE5LTExLTA3VDEzOjM1OjAwWicsCiAgICB9LAogICAgewogICAgICAgIGlkOiAyOCwKICAgICAgICBzdGFydDogJzIwMTktMTEtMDhUMTc6MDA6MDBaJywKICAgICAgICBlbmQ6ICcyMDE5LTExLTExVDEwOjAwOjAwWicsCiAgICB9LAogICAgewogICAgICAgIGlkOiAyOSwKICAgICAgICBzdGFydDogJzIwMTktMTEtMTJUMTI6MDA6MDBaJywKICAgICAgICBlbmQ6ICcyMDE5LTExLTEyVDE0OjAwOjAwWicsCiAgICB9LAogICAgewogICAgICAgIGlkOiAzMCwKICAgICAgICBzdGFydDogJzIwMTktMTEtMTNUMTI6MDA6MDBaJywKICAgICAgICBlbmQ6ICcyMDE5LTExLTEzVDE0OjAwOjAwWicsCiAgICB9LApdOwoKY29uc3QgZXhwZWN0ZWRDaGFubmVsVXRpbGl6YXRpb25zID0gWwogICAgewogICAgICAgIGRhdGU6ICcyMDE5LTExLTA0VDAwOjAwOjAwLjAwMFonLAogICAgICAgIHV0aWxpemF0aW9uUGVyY2VudGFnZTogMTQsCiAgICB9LAogICAgewogICAgICAgIGRhdGU6ICcyMDE5LTExLTA1VDAwOjAwOjAwLjAwMFonLAogICAgICAgIHV0aWxpemF0aW9uUGVyY2VudGFnZTogODYsCiAgICB9LAogICAgewogICAgICAgIGRhdGU6ICcyMDE5LTExLTA2VDAwOjAwOjAwLjAwMFonLAogICAgICAgIHV0aWxpemF0aW9uUGVyY2VudGFnZTogNzEsCiAgICB9LAogICAgewogICAgICAgIGRhdGU6ICcyMDE5LTExLTA3VDAwOjAwOjAwLjAwMFonLAogICAgICAgIHV0aWxpemF0aW9uUGVyY2VudGFnZTogNDMsCiAgICB9LAogICAgewogICAgICAgIGRhdGU6ICcyMDE5LTExLTA4VDAwOjAwOjAwLjAwMFonLAogICAgICAgIHV0aWxpemF0aW9uUGVyY2VudGFnZTogNTcsCiAgICB9LAogICAgewogICAgICAgIGRhdGU6ICcyMDE5LTExLTA5VDAwOjAwOjAwLjAwMFonLAogICAgICAgIHV0aWxpemF0aW9uUGVyY2VudGFnZTogMjksCiAgICB9LAogICAgewogICAgICAgIGRhdGU6ICcyMDE5LTExLTEwVDAwOjAwOjAwLjAwMFonLAogICAgICAgIHV0aWxpemF0aW9uUGVyY2VudGFnZTogMjksCiAgICB9LAogICAgewogICAgICAgIGRhdGU6ICcyMDE5LTExLTExVDAwOjAwOjAwLjAwMFonLAogICAgICAgIHV0aWxpemF0aW9uUGVyY2VudGFnZTogNTcsCiAgICB9LAogICAgewogICAgICAgIGRhdGU6ICcyMDE5LTExLTEyVDAwOjAwOjAwLjAwMFonLAogICAgICAgIHV0aWxpemF0aW9uUGVyY2VudGFnZTogNTcsCiAgICB9LAogICAgewogICAgICAgIGRhdGU6ICcyMDE5LTExLTEzVDAwOjAwOjAwLjAwMFonLAogICAgICAgIHV0aWxpemF0aW9uUGVyY2VudGFnZTogNTcsCiAgICB9LAogICAgewogICAgICAgIGRhdGU6ICcyMDE5LTExLTE0VDAwOjAwOjAwLjAwMFonLAogICAgICAgIHV0aWxpemF0aW9uUGVyY2VudGFnZTogNDMsCiAgICB9LAogICAgewogICAgICAgIGRhdGU6ICcyMDE5LTExLTE1VDAwOjAwOjAwLjAwMFonLAogICAgICAgIHV0aWxpemF0aW9uUGVyY2VudGFnZTogNDMsCiAgICB9LApdOwoKZnVuY3Rpb24gY2woZGF0YSkgeyBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhKSk7IH0KCi8vIGNoYW5uZWxzUmVzcG9uc2UgJiB0ZXN0c1Jlc3BvbnNlCmNvbnN0IGdldFRoZW0gPSAoKSA9PiB7CiBsZXQgbWF4PScnOwogbGV0IG1pbj1uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7CiB0ZXN0c1Jlc3BvbnNlLmZvckVhY2godGVzdCA9PiB7CgltaW49dGVzdC5zdGFydCAmJiBtaW4ubG9jYWxlQ29tcGFyZSh0ZXN0LnN0YXJ0KT4wP3Rlc3Quc3RhcnQ6bWluOwoJbWF4PXRlc3QuZW5kICYmIG1heC5sb2NhbGVDb21wYXJlKHRlc3QuZW5kKTwwP3Rlc3QuZW5kOm1heDsKIH0pOwogCiBtaW49bmV3IERhdGUobWluLnN1YnN0cigwLDEwKSsnVDAwOjAwOjAwLjAwMFonKTsKIG1heD1uZXcgRGF0ZShtYXguc3Vic3RyKDAsMTApKydUMDA6MDA6MDAuMDAwWicpOwogCiBsZXQgcmVzdWx0cyA9IFtdOwogZm9yKHZhciBpPW1pbjsgaTw9bWF4OyBpLnNldERhdGUoaS5nZXREYXRlKCkrMSkpIHsKIAlsZXQgcD0wOwogCWxldCBkPWkudG9JU09TdHJpbmcoKS5zdWJzdHIoMCwxMCk7CiAJCiAJY29uc3QgdGVzdElkcyA9IHRlc3RzUmVzcG9uc2UuZmlsdGVyKHQgPT4gZC5sb2NhbGVDb21wYXJlKCh0LnN0YXJ0KycnKS5zdWJzdHIoMCwxMCkpPj0wICYmIGQubG9jYWxlQ29tcGFyZSgodC5lbmQrJycpLnN1YnN0cigwLDEwKSk8PTApLm1hcCh0ID0+IHQuaWQpOwogCWNvbnN0IGNoYW5uZWxzID0gY2hhbm5lbHNSZXNwb25zZS5maWx0ZXIoYyA9PiBjLnRlc3RzLnNvbWUodCA9PiB0ZXN0SWRzLmluY2x1ZGVzKHQpKSk7CiAJCiAJcD1NYXRoLnJvdW5kKGNoYW5uZWxzLmxlbmd0aCoxMDAuMC9jaGFubmVsc1Jlc3BvbnNlLmxlbmd0aCk7CiAJcmVzdWx0cy5wdXNoKHtkYXRlOiBpLnRvSVNPU3RyaW5nKCksIHV0aWxpemF0aW9uUGVyY2VudGFnZTogcH0pCiB9CiByZXR1cm4gcmVzdWx0czsKfTsKCmNsKGdldFRoZW0oKSk7Cgo=