View Javadoc
1   package com.acumenvelocity.ath.common;
2   
3   import java.util.LinkedHashMap;
4   import java.util.Map;
5   import java.util.stream.Collectors;
6   import java.util.stream.Stream;
7   
8   import net.sf.okapi.common.Util;
9   
10  /**
11   * Check that all expected environment variables are set. Fail fast with a
12   * message if any env var is not set.
13   */
14  public class EnvVarsChecker {
15    private static final Map<String, String> ENV_VARS = Stream.of(new String[][] {
16        { "ATH_HOST",
17            "The particular interface for ATH to listen on (ATH_HOST='0.0.0.0')" },
18  
19        { "ATH_PORT", "Port number for ATH to listen on (ATH_PORT='8080')" },
20  
21        { "ATH_IDLE_TIMEOUT",
22            "Maximum idle time for a connection (ATH_IDLE_TIMEOUT='60000' - 60 sec)" },
23  
24        { "ATH_GCP_SECRET_FILE",
25            "Full path and name of the ATH Google Application Credentials JSON file "
26                + "(ATH_GCP_SECRET_FILE='********')" },
27  
28        { "ATH_GCP_PROJECT_LOCATION",
29            "The GCP region used for Cloud Storage buckets, Translation API "
30                + "operations, and workload deployment, e.g., 'us-central1'. "
31                + "(ATH_GCP_PROJECT_LOCATION='us-central1')" },
32  
33        // { "ATH_GCT_API_KEY",
34        // "Google Cloud Translation API Key (ATH_GCT_API_KEY='AIza********')" },
35  
36        { "ATH_GEMINI_API_KEY",
37            "Gemini API Key (ATH_GEMINI_API_KEY='AIza********')" },
38  
39        { "ATH_SOLR_URL",
40            "Apache Solr URL (ATH_SOLR_URL='http://localhost:8983/solr')" },
41  
42        { "ATH_PDF_CLIENT_ID",
43            "The Client ID required for authenticating with the Adobe PDF services API. "
44                + "(ATH_PDF_CLIENT_ID='********')" },
45  
46        { "ATH_PDF_CLIENT_SECRET",
47            "The Client Secret for authenticating with the Adobe PDF services API. "
48                + "(ATH_PDF_CLIENT_SECRET='********'" },
49  
50        // { "ATH_VERTEX_EVAL_JOB_GCS_BUCKET",
51        // "GCS Bucket for Vertex AI Evaluation Jobs "
52        // + "(ATH_VERTEX_EVAL_JOB_GCS_BUCKET='ath-okapi-bucket'" },
53        //
54        // { "ATH_VERTEX_EVAL_JOB_GCS_PREFIX",
55        // "GCS Prefix for Vertex AI Evaluation Jobs "
56        // + "(ATH_VERTEX_EVAL_JOB_GCS_PREFIX='mt-confidence-eval'" },
57  
58    }).collect(
59        Collectors.toMap(data -> data[0], data -> data[1], (u, v) -> u,
60            LinkedHashMap::new));
61  
62    static void init() {
63      ENV_VARS.forEach((var, descr) -> {
64        String st = null;
65  
66        if (checkEnvVar(var)) {
67          st = Log.format("{}='{}'", var, System.getenv(var));
68          Log.info(EnvVarsChecker.class, st);
69  
70        } else {
71          Log.error(EnvVarsChecker.class, false,
72              "Environment variable '{}' is not set ('{}').\n"
73                  + "Please set all required environment variables.",
74              var, descr);
75  
76          System.exit(1);
77        }
78      });
79    }
80  
81    /**
82     * Check if a given environment variable is set.
83     * 
84     * @param envVarName the env var name
85     * @return true if the given env var presents and not empty
86     */
87    private static boolean checkEnvVar(String envVarName) {
88      String envVarValue = System.getenv(envVarName);
89      boolean res = !Util.isEmpty(envVarValue);
90      return res;
91    }
92  }