diff --git a/dist/cron.js b/dist/cron.js index 9b62261..e9daf70 100644 --- a/dist/cron.js +++ b/dist/cron.js @@ -18,8 +18,15 @@ node_cron_1.default.schedule('*/30 * * * *', async () => { // Save to DB await (0, db_1.insertQuota)(quota); // Send alert if threshold exceeded - if (quota.percentage >= ALERT_THRESHOLD) { - await (0, ntfy_1.sendNtfyAlert)(quota.provider, quota.percentage); + if (quota.provider.toLowerCase() === 'poe') { + if (quota.percentage <= (100 - ALERT_THRESHOLD)) { + await (0, ntfy_1.sendNtfyAlert)(quota.provider, quota.percentage); + } + } + else { + if (quota.percentage >= ALERT_THRESHOLD) { + await (0, ntfy_1.sendNtfyAlert)(quota.provider, quota.percentage); + } } } } diff --git a/dist/cron.js.map b/dist/cron.js.map index ecda177..e13e2fc 100644 --- a/dist/cron.js.map +++ b/dist/cron.js.map @@ -1 +1 @@ -{"version":3,"file":"cron.js","sourceRoot":"","sources":["../src/cron.ts"],"names":[],"mappings":";;;;;AAAA,0DAA6B;AAC7B,oDAAsD;AACtD,sCAA4C;AAC5C,0CAAgD;AAChD,oDAA4B;AAE5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC,CAAC;AAE9E,mBAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;IACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAc,GAAE,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,aAAa;YACb,MAAM,IAAA,gBAAW,EAAC,KAAK,CAAC,CAAC;YAEzB,mCAAmC;YACnC,IAAI,KAAK,CAAC,UAAU,IAAI,eAAe,EAAE,CAAC;gBACtC,MAAM,IAAA,oBAAa,EAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"cron.js","sourceRoot":"","sources":["../src/cron.ts"],"names":[],"mappings":";;;;;AAAA,0DAA6B;AAC7B,oDAAsD;AACtD,sCAA4C;AAC5C,0CAAgD;AAChD,oDAA4B;AAE5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC,CAAC;AAE9E,mBAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;IACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAc,GAAE,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,aAAa;YACb,MAAM,IAAA,gBAAW,EAAC,KAAK,CAAC,CAAC;YAEzB,mCAAmC;YACnC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;gBACzC,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC,EAAE,CAAC;oBAC9C,MAAM,IAAA,oBAAa,EAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC1D,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,KAAK,CAAC,UAAU,IAAI,eAAe,EAAE,CAAC;oBACtC,MAAM,IAAA,oBAAa,EAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC1D,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC"} \ No newline at end of file diff --git a/dist/services/ntfy.d.ts.map b/dist/services/ntfy.d.ts.map index cee7413..a3ec60b 100644 --- a/dist/services/ntfy.d.ts.map +++ b/dist/services/ntfy.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ntfy.d.ts","sourceRoot":"","sources":["../../src/services/ntfy.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAevE"} \ No newline at end of file +{"version":3,"file":"ntfy.d.ts","sourceRoot":"","sources":["../../src/services/ntfy.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAkBvE"} \ No newline at end of file diff --git a/dist/services/ntfy.js b/dist/services/ntfy.js index 8403caa..8d367f0 100644 --- a/dist/services/ntfy.js +++ b/dist/services/ntfy.js @@ -9,7 +9,10 @@ const dotenv_1 = __importDefault(require("dotenv")); dotenv_1.default.config(); async function sendNtfyAlert(provider, percentage) { const url = process.env.NTFY_URL || 'https://ntfy.orfel.de/tokenwatch_dummy'; - const message = `🚨 ${provider} quota is running low! (${percentage.toFixed(1)}% used)`; + const isPoe = provider.toLowerCase() === 'poe'; + const message = isPoe + ? `🚨 ${provider} quota is running low! (${percentage.toFixed(1)}% remaining)` + : `🚨 ${provider} quota is running low! (${percentage.toFixed(1)}% used)`; try { await axios_1.default.post(url, message, { headers: { diff --git a/dist/services/ntfy.js.map b/dist/services/ntfy.js.map index e90572b..57994af 100644 --- a/dist/services/ntfy.js.map +++ b/dist/services/ntfy.js.map @@ -1 +1 @@ -{"version":3,"file":"ntfy.js","sourceRoot":"","sources":["../../src/services/ntfy.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,oDAA4B;AAE5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAET,KAAK,wBAAwB,QAAgB,EAAE,UAAkB;IACpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,wCAAwC,CAAC;IAC7E,MAAM,OAAO,GAAG,MAAM,QAAQ,2BAA2B,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAExF,IAAI,CAAC;QACD,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE;YAC3B,OAAO,EAAE;gBACL,OAAO,EAAE,kBAAkB;gBAC3B,MAAM,EAAE,eAAe;aAC1B;SACJ,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;AACL,CAAC"} \ No newline at end of file +{"version":3,"file":"ntfy.js","sourceRoot":"","sources":["../../src/services/ntfy.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,oDAA4B;AAE5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAET,KAAK,wBAAwB,QAAgB,EAAE,UAAkB;IACpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,wCAAwC,CAAC;IAC7E,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IAC/C,MAAM,OAAO,GAAG,KAAK;QACjB,CAAC,CAAC,MAAM,QAAQ,2BAA2B,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc;QAC9E,CAAC,CAAC,MAAM,QAAQ,2BAA2B,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9E,IAAI,CAAC;QACD,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE;YAC3B,OAAO,EAAE;gBACL,OAAO,EAAE,kBAAkB;gBAC3B,MAAM,EAAE,eAAe;aAC1B;SACJ,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;AACL,CAAC"} \ No newline at end of file diff --git a/dist/services/providers.js b/dist/services/providers.js index 3918bf8..371cf04 100644 --- a/dist/services/providers.js +++ b/dist/services/providers.js @@ -42,7 +42,7 @@ async function fetchPoeQuota() { const available = res.data.current_point_balance || 0; const total = 2500000; const used = total - available > 0 ? total - available : 0; - const percentage = (used / total) * 100; + const percentage = (available / total) * 100; const dailyRefresh = 75000; const expiringPoints = Math.max(0, available + dailyRefresh - total); const daysUntilCap = Math.floor((total - available) / dailyRefresh); diff --git a/dist/services/providers.js.map b/dist/services/providers.js.map index fd60f50..d4276eb 100644 --- a/dist/services/providers.js.map +++ b/dist/services/providers.js.map @@ -1 +1 @@ -{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/services/providers.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/services/providers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/public/app.js b/public/app.js index 251a1c3..c7c17e1 100644 --- a/public/app.js +++ b/public/app.js @@ -54,12 +54,22 @@ function updateRow(providerId, quota) { // Status coloring percentText.className = 'percentage'; // reset - if (percentage > 90) { - percentText.classList.add('status-danger'); - } else if (percentage > 70) { - percentText.classList.add('status-warn'); + if (quota.provider.toLowerCase() === 'poe') { + if (percentage < 10) { + percentText.classList.add('status-danger'); + } else if (percentage < 30) { + percentText.classList.add('status-warn'); + } else { + percentText.classList.add('status-good'); + } } else { - percentText.classList.add('status-good'); + if (percentage > 90) { + percentText.classList.add('status-danger'); + } else if (percentage > 70) { + percentText.classList.add('status-warn'); + } else { + percentText.classList.add('status-good'); + } } // Detail text @@ -134,8 +144,10 @@ function updateRow(providerId, quota) { spread: 70, origin: { y: 0.6 } }); - statusText.innerText = 'LIMIT REACHED!'; - statusText.style.color = 'var(--danger)'; + if (quota.provider.toLowerCase() !== 'poe') { + statusText.innerText = 'LIMIT REACHED!'; + statusText.style.color = 'var(--danger)'; + } } } diff --git a/src/cron.ts b/src/cron.ts index aa2ad5e..dfa9e11 100644 --- a/src/cron.ts +++ b/src/cron.ts @@ -17,8 +17,14 @@ cron.schedule('*/30 * * * *', async () => { await insertQuota(quota); // Send alert if threshold exceeded - if (quota.percentage >= ALERT_THRESHOLD) { - await sendNtfyAlert(quota.provider, quota.percentage); + if (quota.provider.toLowerCase() === 'poe') { + if (quota.percentage <= (100 - ALERT_THRESHOLD)) { + await sendNtfyAlert(quota.provider, quota.percentage); + } + } else { + if (quota.percentage >= ALERT_THRESHOLD) { + await sendNtfyAlert(quota.provider, quota.percentage); + } } } } catch (error) { diff --git a/src/services/ntfy.ts b/src/services/ntfy.ts index 2387db2..de3b1a2 100644 --- a/src/services/ntfy.ts +++ b/src/services/ntfy.ts @@ -5,7 +5,10 @@ dotenv.config(); export async function sendNtfyAlert(provider: string, percentage: number) { const url = process.env.NTFY_URL || 'https://ntfy.orfel.de/tokenwatch_dummy'; - const message = `🚨 ${provider} quota is running low! (${percentage.toFixed(1)}% used)`; + const isPoe = provider.toLowerCase() === 'poe'; + const message = isPoe + ? `🚨 ${provider} quota is running low! (${percentage.toFixed(1)}% remaining)` + : `🚨 ${provider} quota is running low! (${percentage.toFixed(1)}% used)`; try { await axios.post(url, message, { diff --git a/src/services/providers.ts b/src/services/providers.ts index f148a12..b9dd269 100644 --- a/src/services/providers.ts +++ b/src/services/providers.ts @@ -41,7 +41,7 @@ export async function fetchPoeQuota(): Promise { const available = res.data.current_point_balance || 0; const total = 2500000; const used = total - available > 0 ? total - available : 0; - const percentage = (used / total) * 100; + const percentage = (available / total) * 100; const dailyRefresh = 75000; const expiringPoints = Math.max(0, available + dailyRefresh - total);