-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.ts
122 lines (103 loc) · 3.56 KB
/
index.ts
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import {Turknet} from "../../Turknet";
import * as GlobalTypes from "../../dataTypes";
import dayjs from "dayjs";
import utc from "dayjs/plugin/utc";
dayjs.extend(utc);
interface RawOutageObject {
Aciklama: string;
BaslangicSaati: string;
BaslangicTarihi: string;
BitisSaati: string;
BitisTarihi: string;
Calisma: string;
CalismaKategorisi: string;
HOSTNAME: string;
Il: string;
Ilce: string;
KesintiSuresi: string;
POP: string;
SSG: string;
}
export interface WorkObject {
type: string;
outageTime: string;
popExchange: string;
affectedSSG: string;
affectedHost: string;
province: string;
city: string;
rawData: string;
}
export interface OutageObject {
description: string;
startDate: Date;
endDate: Date;
work: WorkObject;
}
export class FutureOps {
/** @internal @ignore */
private __client: Turknet;
constructor(client: Turknet) {
this.__client = client;
}
private __stripASPDateString(datestr: string): number {
return parseInt(datestr.replace(/^\/Date\(|\+\d{4}\)\/$/, ""), 10);
}
private __mergeDateTime(date: string, time: string) {
if (!time.includes(":")) throw new Error("Invalid time object.");
let parsedDate = dayjs(this.__stripASPDateString(date)).utcOffset(3);
let splitTime = time.split(":");
if (splitTime.length !== 3) throw new Error("Missing time object.");
return parsedDate.hour(parseInt(splitTime[0], undefined)).minute(parseInt(splitTime[1], undefined)).second(parseInt(splitTime[2], undefined)).toDate();
}
private __convertOutageObject(outageData: RawOutageObject) {
try {
let startDate = this.__mergeDateTime(outageData.BaslangicTarihi, outageData.BaslangicSaati);
let endDate = this.__mergeDateTime(outageData.BitisTarihi, outageData.BitisSaati);
let ret: OutageObject = {
description: outageData.Aciklama.replace(/\r\n/g, "\n"), // we don't like CRLF here
startDate: startDate,
endDate: endDate,
work: {
type: outageData.CalismaKategorisi,
outageTime: outageData.KesintiSuresi,
popExchange: outageData.POP,
affectedSSG: outageData.SSG,
affectedHost: outageData.HOSTNAME,
province: outageData.Il,
city: outageData.Ilce,
rawData: outageData.Calisma
}
};
return ret;
} catch (error) {
return null;
}
}
async getLatestOperation(): Promise<OutageObject> {
try {
let raw = await this.__client.__request() as GlobalTypes.ResultObject;
let data = raw.PlannedOperationInfoList[0];
let res = this.__convertOutageObject(data);
if (!res) throw new Error("Got empty data.");
return res;
} catch (error) {
return error;
}
}
async getAllOperations(): Promise<OutageObject[]> {
try {
let raw = await this.__client.__request() as GlobalTypes.ResultObject;
let datas = raw.PlannedOperationInfoList;
let resp = [];
for (const outageObj of datas) {
let d = this.__convertOutageObject(outageObj)
if (d === null) continue;
resp.push(d);
}
return resp;
} catch (error) {
return error;
}
}
}