Skip to content
Snippets Groups Projects
Commit 12cd6a80 authored by Lucas Fernandes de Oliveira's avatar Lucas Fernandes de Oliveira
Browse files

Issue #54: Update config files to use env vars

parent 99896bbf
No related branches found
No related tags found
1 merge request!49Issue #54: Update config files to use env vars
Pipeline #
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
*.pid *.pid
*.map *.map
*.swp *.swp
*.env
*.swo
/.trash /.trash
/pids /pids
/logs /logs
......
image: node:6.2 image: node:6.12.2
services: services:
- postgres:latest - postgres:latest
...@@ -18,6 +18,7 @@ before_script: ...@@ -18,6 +18,7 @@ before_script:
run_tests: run_tests:
script: script:
- mv config/ci_test.yaml.example config/test.yaml - mv config/ci_test.yaml.example config/test.yaml
- mv config/ci_test.env.example config/test.env
- npm test - npm test
- npm run lint - npm run lint
tags: tags:
......
BLENDB_DB_USER=runner
BLENDB_DB_NAME=blendb_fixture
BLENDB_DB_PASSWORD=
BLENDB_DB_HOST=postgres
BLENDB_DB_PORT=5432
BLENDB_ST_CREATE=true
BLENDB_ST_INSERT=true
BLENDB_ADAPTER=postgres
PORT=3000
# gitignore ignores files.yaml in this folder # gitignore ignores files.yaml in this folder
# however a config file for tests in CI is required # however a config file for tests in CI is required
# so this example file in fact is the CI test file # so this example file in fact is the CI test file
connection:
database: 'blendb_fixture'
user: 'runner'
password: ''
host: 'postgres'
port: 5432
max: 10
idleTimeoutMillis: 30000
struct:
create: true
insert: true
schema:
views: views:
- -
alias: "View 0" alias: "View 0"
......
BLENDB_DB_USER=blendb
BLENDB_DB_NAME=blendb-test
BLENDB_DB_PASSWORD=secret
BLENDB_DB_HOST=localhost
BLENDB_DB_PORT=5432
BLENDB_ST_CREATE=false
BLENDB_ST_INSERT=false
BLENDB_ADAPTER=postgres
PORT=3000
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
"description": "BlenDB", "description": "BlenDB",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"start": "node index", "start": "env $(cat config/config.env) node index",
"lint": "tslint -s node_modules/tslint-stylish -t stylish src/**/*.ts test/**/*.ts", "lint": "tslint -s node_modules/tslint-stylish -t stylish src/**/*.ts test/**/*.ts",
"test": "ts-node node_modules/istanbul/lib/cli.js cover -x \"**/*.spec.ts\" -e .ts _mocha", "test": "env $(cat config/test.env) ts-node node_modules/istanbul/lib/cli.js cover -x \"**/*.spec.ts\" -e .ts _mocha",
"show-coverage": "xdg-open coverage/lcov-report/index.html", "show-coverage": "xdg-open coverage/lcov-report/index.html",
"doc-api": "raml2html -i specs/blendb-api-v1.raml -o doc/api-v1-reference.html", "doc-api": "raml2html -i specs/blendb-api-v1.raml -o doc/api-v1-reference.html",
"database": "ts-node database/config.ts database", "database": "ts-node database/config.ts database",
......
...@@ -22,9 +22,19 @@ import { Middleware } from "../types"; ...@@ -22,9 +22,19 @@ import { Middleware } from "../types";
import { Adapter } from "../../core/adapter"; import { Adapter } from "../../core/adapter";
import { PostgresAdapter } from "../../adapter/postgres"; import { PostgresAdapter } from "../../adapter/postgres";
import { PoolConfig } from "pg"; import { PoolConfig } from "pg";
import { Connection } from "../../util/configParser";
export function PostgresMw(config: PoolConfig): Middleware { export function PostgresMw(config: Connection): Middleware {
let adapter: Adapter = new PostgresAdapter(config); let parsedConfig: PoolConfig = {
user: config.user,
database: config.database,
password: config.password,
host: config.host,
port: config.port,
max: 10,
idleTimeoutMillis: 3000
};
let adapter: Adapter = new PostgresAdapter(parsedConfig);
return function postgresMiddleware(req, res, next) { return function postgresMiddleware(req, res, next) {
req.adapter = adapter; req.adapter = adapter;
next(); next();
......
...@@ -42,7 +42,14 @@ import { PostgresMw } from "./api/middlewares/adapter"; ...@@ -42,7 +42,14 @@ import { PostgresMw } from "./api/middlewares/adapter";
import { ErrorMw } from "./api/middlewares/error"; import { ErrorMw } from "./api/middlewares/error";
app.use(EngineMw(config)); app.use(EngineMw(config));
if (config.adapter === "postgres") {
app.use(PostgresMw(config.connection)); app.use(PostgresMw(config.connection));
}
else {
console.error("Invalid adapter. Options available are: postgres");
process.exit(1);
}
// parse the RAML spec and load osprey middleware // parse the RAML spec and load osprey middleware
ramlParser.loadFile("specs/blendb-api-v1.raml") ramlParser.loadFile("specs/blendb-api-v1.raml")
......
...@@ -24,7 +24,6 @@ import { View, ViewOptions, LoadView } from "../core/view"; ...@@ -24,7 +24,6 @@ import { View, ViewOptions, LoadView } from "../core/view";
import { RelationType } from "../common/types"; import { RelationType } from "../common/types";
import { Filter } from "../core/filter"; import { Filter } from "../core/filter";
import { Clause } from "../core/clause"; import { Clause } from "../core/clause";
import { PoolConfig } from "pg";
import * as fs from "fs"; import * as fs from "fs";
import * as yaml from "js-yaml"; import * as yaml from "js-yaml";
...@@ -45,12 +44,6 @@ interface ConfigSchema { ...@@ -45,12 +44,6 @@ interface ConfigSchema {
dimensions: DimensionStrOptions[]; dimensions: DimensionStrOptions[];
} }
interface ConfigFile {
connection: PoolConfig;
struct: LoadStruct;
schema: ConfigSchema;
}
interface BuildView { interface BuildView {
view: View; view: View;
file: string; file: string;
...@@ -63,7 +56,8 @@ export interface LoadStruct{ ...@@ -63,7 +56,8 @@ export interface LoadStruct{
} }
export interface ParsedConfig { export interface ParsedConfig {
connection: PoolConfig; adapter: string;
connection: Connection;
views: View[]; views: View[];
metrics: Metric[]; metrics: Metric[];
dimensions: Dimension[]; dimensions: Dimension[];
...@@ -72,6 +66,14 @@ export interface ParsedConfig { ...@@ -72,6 +66,14 @@ export interface ParsedConfig {
buildViews: BuildView[]; buildViews: BuildView[];
} }
export interface Connection {
user: string;
database: string;
password: string;
host: string;
port: number;
}
interface DimensionMap { interface DimensionMap {
[key: string]: Dimension; [key: string]: Dimension;
} }
...@@ -82,19 +84,33 @@ interface MetricMap { ...@@ -82,19 +84,33 @@ interface MetricMap {
export class ConfigParser { export class ConfigParser {
public static parse(configPath: string): ParsedConfig { public static parse(configPath: string): ParsedConfig {
let config: ConfigFile = yaml.safeLoad(fs.readFileSync(configPath, { let config: ConfigSchema = yaml.safeLoad(fs.readFileSync(configPath, {
encoding: "utf-8" encoding: "utf-8"
})); }));
let metricsOpts = config.schema.metrics; let connection: Connection = {
let viewsOpts = config.schema.views; user: process.env.BLENDB_DB_USER,
let dimensionsOpts = config.schema.dimensions; database: process.env.BLENDB_DB_NAME,
password: process.env.BLENDB_DB_PASSWORD,
host: process.env.BLENDB_DB_HOST,
port: parseInt(process.env.BLENDB_DB_PORT, 10)
};
let struct: LoadStruct = {
create: process.env.BLENDB_ST_CREATE.toLowerCase() === "true",
insert: process.env.BLENDB_ST_INSERT.toLowerCase() === "true"
};
let metricsOpts = config.metrics;
let viewsOpts = config.views;
let dimensionsOpts = config.dimensions;
let parsed: ParsedConfig = { let parsed: ParsedConfig = {
connection: config.connection, adapter: process.env.BLENDB_ADAPTER || "postgres",
connection: connection,
views: [], views: [],
metrics: [], metrics: [],
dimensions: [], dimensions: [],
struct: config.struct, struct: struct,
loadViews: [], loadViews: [],
buildViews: [] buildViews: []
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment