diff --git a/api/cloud_api/routes/Mailer.js b/api/cloud_api/routes/Mailer.js index 7b512c955..dca18e3be 100644 --- a/api/cloud_api/routes/Mailer.js +++ b/api/cloud_api/routes/Mailer.js @@ -27,7 +27,11 @@ router.post('/sendVerificationEmail', async (req, res) => { if (tokenJson) { if (apiHandler.checkIfTokenIsExpired(tokenJson)) { - logger.warn('refreshing token'); + // the time() function in prometheus returns the epoch time in seconds + // i.e. 1760310047.552 + // Date.now() returns the time in milliseconds, so we divide by 1000 + // to be consistent with prometheus. + MetricsHandler.gcpRefreshTokenLastUpdated.set(Math.floor(Date.now() / 1000)); apiHandler.refreshToken(); } } else { @@ -69,6 +73,7 @@ router.post('/sendPasswordReset', async (req, res) => { if (tokenJson) { if (apiHandler.checkIfTokenIsExpired(tokenJson)) { logger.warn('refreshing token'); + MetricsHandler.gcpRefreshTokenLastUpdated.set(Math.floor(Date.now() / 1000)); apiHandler.refreshToken(); } } else { diff --git a/api/cloud_api/util/SceGoogleApiHandler.js b/api/cloud_api/util/SceGoogleApiHandler.js index bd863250f..e95a5fc68 100644 --- a/api/cloud_api/util/SceGoogleApiHandler.js +++ b/api/cloud_api/util/SceGoogleApiHandler.js @@ -80,7 +80,16 @@ class SceGoogleApiHandler { * DevOps purposes, false for API endpoints. */ getNewToken(isDevScript) { - if (!isDevScript) return; + if (!isDevScript) { + logger.warn(` + The 'getNewToken' function was called outside of a development environment. + Token generation requires manual steps and interactive console input. + If you actually want to set this up, visit: + https://sce.sjsu.edu/s/gmailtoken + Interactive setup has been skipped. + `); + return; + } const authUrl = this.oAuth2Client.generateAuthUrl({ /* eslint-disable-next-line */ diff --git a/api/util/metrics.js b/api/util/metrics.js index bb6c75c9a..d2b57d4b2 100644 --- a/api/util/metrics.js +++ b/api/util/metrics.js @@ -63,6 +63,11 @@ class MetricsHandler { labelNames: ['endpointName'] }) + gcpRefreshTokenLastUpdated = new client.Gauge({ + name: 'google_cloud_refresh_token_last_updated', + help: 'When the GCP refresh token needs to be refreshed, time written in eopch format' + }) + constructor() { register.setDefaultLabels({ app: 'sce-core', diff --git a/prometheus/prometheus.yml b/prometheus/prometheus.yml index a80acfe7a..900792379 100644 --- a/prometheus/prometheus.yml +++ b/prometheus/prometheus.yml @@ -17,6 +17,9 @@ scrape_configs: - job_name: 'clark' static_configs: - targets: ['main-endpoints:8080'] + - job_name: 'clark-email' + static_configs: + - targets: ['sce-cloud-api:8082'] # the below is for discord bot - job_name: 'sarah' static_configs: