Files
SREBOT/dateindex.js
T
NotSoToothless 3fb15d6282 consolidate runtime env into .env, drop ecosystem env blocks (#1229)
- Make .env the single source of truth for runtime config. Remove all
  `env:` blocks from SREBOT/ecosystem.config.js and TSSBOT/ecosystem.config.js
  so values can't silently shadow .env. Both ecosystem files load .env via
  `require('dotenv').config()` and PM2 inherits the resolved environment.

- Rename SREBOT_STORAGE_VOL_PATH → STORAGE_VOL_PATH across all readers
  (BOT/utils.py, BOT/receiver_bridge.py, BOT/render_recap.py, server.js,
  web/server.js, dateindex.js, scripts/*, srebot.service, tests/, README,
  and both .env files). STORAGE is shared between SREBOT and TSSBOT, so the
  variable shouldn't carry one bot's prefix.

- Rename per-process PORT env vars to disambiguated names so .env can be
  the source of truth without collisions:
    PORT (api)     → SREBOT_API_PORT     (server.js)
    PORT (web)     → SREBOT_WEB_PORT     (web/server.js)
    WEBHOOK_PORT   → SREBOT_WEBHOOK_PORT (github_webhook_updater.py)
  SREBOT_EXTERNAL_HOST/PORT/UPSTREAM_URL were already uniquely named;
  they just move from ecosystem env to .env.

- TSSBOT/.env: drop GITHUB_WEBHOOK_SECRET (only srebot-webhook consumes it)
  and the stale SREBOT_DEPLOY_PATH. SREBOT/.env: also drop the obsolete
  SREBOT_DEPLOY_PATH (ecosystem now hardcodes __dirname).

- ecosystem.config.js no longer references SREBOT_DEPLOY_PATH; deploy path
  is always __dirname of the ecosystem file.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 00:07:34 -07:00

72 lines
2.4 KiB
JavaScript

require('dotenv').config();
const sqlite3 = require('sqlite3').verbose();
const path = require('path');
const STORAGE_ROOT = (process.env.STORAGE_VOL_PATH || '').trim();
if (!STORAGE_ROOT) {
throw new Error('STORAGE_VOL_PATH must be set');
}
const DB_PATH = path.join(STORAGE_ROOT, 'sq_battles.db');
console.log(`Opening database at: ${DB_PATH}`);
const db = new sqlite3.Database(DB_PATH, sqlite3.OPEN_READWRITE, (err) => {
if (err) {
console.error('Failed to open database:', err.message);
process.exit(1);
}
console.log('Connected to database successfully');
const checkIndexQuery = `
SELECT name FROM sqlite_master
WHERE type='index' AND name='idx_endtime_unix'
`;
db.get(checkIndexQuery, [], (err, row) => {
if (err) {
console.error('Error checking for existing index:', err.message);
db.close();
process.exit(1);
}
if (row) {
console.log('Index idx_endtime_unix already exists');
db.close();
console.log('Nothing to do - exiting');
process.exit(0);
}
console.log('Creating index idx_endtime_unix on player_games_hist(endtime_unix)...');
const createIndexQuery = `CREATE INDEX idx_endtime_unix ON player_games_hist(endtime_unix)`;
db.run(createIndexQuery, [], (err) => {
if (err) {
console.error('Failed to create index:', err.message);
db.close();
process.exit(1);
}
console.log('Index created successfully!');
db.get(checkIndexQuery, [], (err, row) => {
if (err) {
console.error('Error verifying index:', err.message);
} else if (row) {
console.log('Index verified successfully');
} else {
console.warn('Warning: Index not found after creation');
}
db.close((err) => {
if (err) {
console.error('Error closing database:', err.message);
process.exit(1);
}
console.log('Database connection closed');
console.log('\nIndex creation complete!');
process.exit(0);
});
});
});
});
});