do not down on some minor issues

This commit is contained in:
Jurgis Sakalauskas
2025-11-08 11:18:33 +02:00
parent eead7ab522
commit 7e3b3e84b2
8 changed files with 913 additions and 12 deletions
@@ -0,0 +1,82 @@
// @ts-ignore
import TransmissionClient from 'transmission';
import { settings } from '../settings';
type TransmissionOptions = {
url?: string;
host?: string;
port?: number;
ssl?: boolean;
}
export class Transmission {
client: any;
constructor(transmissionOptions: TransmissionOptions) {
this.client = new TransmissionClient(transmissionOptions);
}
async getPort(): Promise<number> {
return new Promise((resolve, reject) => {
this.client.session((err: any, arg: any) => {
if (err) {
reject(err);
}
resolve(arg['peer-port']);
});
});
}
async setPort(port: number) {
return new Promise<void>((resolve, reject) => {
this.client.callServer({ "arguments": { "peer-port": port }, "method": "session-set" }, (err: any, arg: any) => {
if (err) {
reject(err);
}
resolve();
});
});
}
async testPortIfOpen(): Promise<boolean> {
return new Promise((resolve, reject) => {
this.client.callServer({ "method": "port-test" }, (err: any, arg: any) => {
if (err) {
reject(err);
return;
}
if (!('port-is-open' in arg)) {
console.log('port-is-open-arg', arg);
resolve(false);
return;
}
resolve(arg['port-is-open']);
});
});
}
async testPortIfOpen2() {
this.client.callServer({ "method": "port-test" }, (err: any, arg: any) => {
if (err) {
console.error('Error testing port:', err);
return;
}
console.log('Port test result:', arg);
});
}
}
export const transmissionClient = new Transmission({
host: 'localhost',
port: 9091,
});
transmissionClient.getPort().then(port => {
console.log('Current Transmission port:', port);
}).catch(err => {
console.error('Error getting Transmission port:', err);
});
transmissionClient.testPortIfOpen2()
+6
View File
@@ -43,6 +43,12 @@ export class Transmission {
this.client.callServer({ "method": "port-test" }, (err: any, arg: any) => {
if (err) {
reject(err);
return;
}
if (!('port-is-open' in arg)) {
console.log('port-is-open-arg', arg);
resolve(false);
return;
}
resolve(arg['port-is-open']);
});
+20 -11
View File
@@ -11,11 +11,14 @@ export async function setPortFlow() {
await doSetPortFlow();
} catch (e) {
console.error('Error in set port flow', e);
await transmissionContainer.downTransmission(`Shutting down: error in set port flow.`)
const reason = e instanceof Error ? e.message : String(e);
await transmissionContainer.downTransmission(`Shutting down: error in set port flow. Reason: ${reason}`);
}
await dailyCheckIn();
}
const checkIfPortOpen = true;
async function doSetPortFlow() {
console.log('Starting set port flow');
@@ -31,7 +34,7 @@ async function doSetPortFlow() {
console.log(`Gathering info`);
const port = await transmissionClient.getPort();
console.log(`Port: ${port}`);
const portOpen = await transmissionClient.testPortIfOpen();
const portOpen = checkIfPortOpen ? await transmissionClient.testPortIfOpen().catch(() => 'error_checking_port') : 'not_checked';
console.log(`Port is open: ${portOpen}`);
const defaultInterface = await transmissionContainer.getDefaultInterface();
console.log(`Default interface: ${defaultInterface?.interface} Internal ip: ${defaultInterface?.ip}`);
@@ -71,12 +74,12 @@ async function doSetPortFlow() {
);
}
if (portOpen) {
if (portOpen === true) {
console.log(`Port ${port} is open`);
return;
}
console.log(`Port ${port} is not open. Fetching new port.`);
console.log(`Port ${port} is not open or not checked (status ${portOpen}). Fetching new port.`);
//fetch new port
const request = await fetch(`https://connect.pvdatanet.com/v3/Api/port?ip[]=${defaultInterface.ip}`)
@@ -98,8 +101,14 @@ async function doSetPortFlow() {
);
}
if (newPort === port) {
console.log(`New port ${newPort} is the same as the old port ${port}`);
return;
}
console.log(`Setting port to ${newPort}`);
const resultOK = await gluetunContainer.setOpenFirewallPort(newPort);
// TODO - remove old port from firewall?
if (!resultOK) {
return await transmissionContainer.downTransmission(
`Shutting down: could not open new port in gluetun firewall`,
@@ -112,14 +121,14 @@ async function doSetPortFlow() {
await kvDataStorage.set({ numPortsChanged: numPortsChanged + 1 });
console.log('Port set');
const newPortOpen = await transmissionClient.testPortIfOpen();
const newPortOpen = checkIfPortOpen ? await transmissionClient.testPortIfOpen().catch(() => 'error_checking_port') : 'not_checked';
console.log(`Port ${newPort} is open: ${newPortOpen}`);
if (!newPortOpen) {
return await transmissionContainer.downTransmission(
`Shutting down: new port is still not open, data: ${JSON.stringify(data)}`,
);
}
// if (!newPortOpen) {
// return await transmissionContainer.downTransmission(
// `Shutting down: new port is still not open, data: ${JSON.stringify(data)}`,
// );
// }
await notificationService.sendNotification(`Port changed from ${port} to ${newPort} successfully`);
await notificationService.sendNotification(`Port changed from ${port} to ${newPort} successfully. New port open: ${newPortOpen}.`);
}