diff --git a/config/ci_dimensions.yaml.example b/config/ci_dimensions.yaml.example new file mode 100644 index 0000000000000000000000000000000000000000..c7f2e3887e80aa7c1d9a83681c7608d2b131da23 --- /dev/null +++ b/config/ci_dimensions.yaml.example @@ -0,0 +1,47 @@ +- + name: "dim:2" + dataType: "integer" + description: "A dimension of Blendb. Has 5 possible values." +- + name: "dim:3" + dataType: "string" + description: "A dimension of Blendb. Has 5 possible values." +- + name: "dim:4" + dataType: "string" + description: "A dimension of Blendb. Has 5 possible values." +- + name: "dim:5" + dataType: "boolean" + description: "A dimension of Blendb. Has 2 possible values." +- + name: "dim:6" + dataType: "integer" + description: "A dimension of Blendb. Has 5 possible values." +- + name: "dim:7" + dataType: "integer" + description: "A dimension of Blendb. Has 5 possible values." +- + name: "dim:8" + dataType: "integer" + description: "A dimension of Blendb. Has 5 possible values." +- + name: "dim:9" + dataType: "integer" + parent: "dim:0" + relation: "day" + description: "A dimension of Blendb. Has 30 possible values." +- + name: "dim:10" + dataType: "integer" + parent: "dim:0" + relation: "month" + description: "A dimension of Blendb. Has 12 possible values." +- + name: "dim:11" + dataType: "integer" + parent: "dim:0" + relation: "year" + description: "A dimension of Blendb. Has 1 possible value." + diff --git a/config/ci_enumtypes.yaml.example b/config/ci_enumtypes.yaml.example new file mode 100644 index 0000000000000000000000000000000000000000..b2f45fbc814b2e9975c325ccb82e266f8adeeaf7 --- /dev/null +++ b/config/ci_enumtypes.yaml.example @@ -0,0 +1,17 @@ +- + name: "enumtype:1" + values: + - "test_4" + - "test_5" + - "test_6" + - "string" +- + name: "enumtype:2" + values: + - "test_7" + - "test_8" +- + name: "enumtype:3" + values: + - "test_9" + diff --git a/config/ci_metrics.yaml.example b/config/ci_metrics.yaml.example new file mode 100644 index 0000000000000000000000000000000000000000..136dce85c7fbdda7c42b24585b747ea52c424e8b --- /dev/null +++ b/config/ci_metrics.yaml.example @@ -0,0 +1,26 @@ +- + name: "met:2" + dataType: "integer" + aggregation: "avg" + description: "No meaning, just used for test" +- + name: "met:3" + dataType: "integer" + aggregation: "sum" + description: "No meaning, just used for test" +- + name: "met:4" + dataType: "integer" + aggregation: "sum" + description: "No meaning, just used for test" +- + name: "met:5" + dataType: "integer" + aggregation: "avg" + description: "No meaning, just used for test" +- + name: "met:6" + dataType: "integer" + aggregation: "count" + description: "No meaning, just used for test" + diff --git a/config/ci_metrics_1.yaml.example b/config/ci_metrics_1.yaml.example new file mode 100644 index 0000000000000000000000000000000000000000..6cdf72415191f179e8a4bd80bf6787eecb03c537 --- /dev/null +++ b/config/ci_metrics_1.yaml.example @@ -0,0 +1,26 @@ +- + name: "met:7" + dataType: "integer" + aggregation: "count" + description: "No meaning, just used for test" +- + name: "met:8" + dataType: "integer" + aggregation: "sum" + description: "No meaning, just used for test" +- + name: "met:9" + dataType: "integer" + aggregation: "count" + description: "No meaning, just used for test" +- + name: "met:10" + dataType: "integer" + aggregation: "max" + description: "No meaning, just used for test" +- + name: "met:11" + dataType: "integer" + aggregation: "min" + description: "No meaning, just used for test" + diff --git a/config/ci_sources.yaml.example b/config/ci_sources.yaml.example new file mode 100644 index 0000000000000000000000000000000000000000..20a624bdb02a29972734204d1f3f3d07c54941a7 --- /dev/null +++ b/config/ci_sources.yaml.example @@ -0,0 +1,53 @@ +- + name: "source_1" + description: "source with 2 entries" + fields: + - + name: "fields:0" + description: "first entry" + dataType: "enumtype" + enumType: "enumtype:0" + - + name: "fields:1" + description: "second entry" + dataType: "string" +- + name: "source_2" + description: "source with one entry and undefined dataType" + fields: + - + name: "fields:0" + description: "first entry" + dataType: "string" +- + name: "source_3" + description: "source with one entry and without description" + fields: + - + name: "fields:0" + dataType: "string" +- + name: "source_4" + description: "source with all core types from blendb" + fields: + - + name: "fields:0" + description: "first entry" + dataType: "integer" + - + name: "fields:1" + description: "second entry" + dataType: "float" + - + name: "fields:2" + description: "third entry" + dataType: "string" + - + name: "fields:3" + description: "fourth entry" + dataType: "boolean" + - + name: "fields:4" + description: "fifth entry" + dataType: "date" + diff --git a/config/ci_test.yaml.example b/config/ci_test.yaml.example index 0e0dc70e25c3d2db0ef345b67e77caf4b7ab6223..165803f69d78a0e7f8970dde23764b3de968fa05 100644 --- a/config/ci_test.yaml.example +++ b/config/ci_test.yaml.example @@ -2,307 +2,77 @@ # however a config file for tests in CI is required # so this example file in fact is the CI test file views: - - - alias: "View 0" - data: "test/postgres/fixtures/view0.json" - origin: true - dimensions: - - "dim:0" - - "dim:7" - metrics: - - "met:0" - - "met:1" - - "met:2" - - "met:10" - - - alias: "View 1" - data: "test/postgres/fixtures/view1.json" - origin: true - dimensions: - - "dim:1" - - "dim:8" - metrics: - - "met:3" - - "met:4" - - - alias: "View 2" - data: "test/postgres/fixtures/view2.json" - origin: true - dimensions: - - "dim:2" - metrics: - - "met:5" - - "met:6" - - "met:11" - - - alias: "View 3" - data: "test/postgres/fixtures/view3.json" - origin: true - dimensions: - - "dim:2" - - "dim:3" - - "dim:4" - - - alias: "View 4" - data: "test/postgres/fixtures/view4.json" - origin: true - dimensions: - - "dim:2" - - "dim:7" - - "dim:8" - - - alias: "View 5" - data: "test/postgres/fixtures/view5.json" - origin: true - dimensions: - - "dim:3" - metrics: - - "met:7" - - - alias: "View 6" - data: "test/postgres/fixtures/view6.json" - origin: true - dimensions: - - "dim:4" - metrics: - - "met:8" - - - alias: "View 7" - data: "test/postgres/fixtures/view7.json" - origin: true - dimensions: - - "dim:4" - - "dim:5" - - "dim:6" - - - alias: "View 8" - data: "test/postgres/fixtures/view8.json" - origin: true - dimensions: - - "dim:5" - - "dim:6" - metrics: - - "met:9" - - - alias: "view 9" - data: "test/postgres/fixtures/view9.json" - origin: false - dimensions: - - "dim:2" - metrics: - - "met:5" - - "met:6" - - "met:7" - clauses: - - "dim:2!=1" -metrics: - - - name: "met:0" - dataType: "integer" - aggregation: "sum" - description: "No meaning, just used for test" - - - name: "met:1" - dataType: "integer" - aggregation: "avg" - description: "No meaning, just used for test" - - - name: "met:2" - dataType: "integer" - aggregation: "avg" - description: "No meaning, just used for test" - - - name: "met:3" - dataType: "integer" - aggregation: "sum" - description: "No meaning, just used for test" - - - name: "met:4" - dataType: "integer" - aggregation: "sum" - description: "No meaning, just used for test" - - - name: "met:5" - dataType: "integer" - aggregation: "avg" - description: "No meaning, just used for test" - - - name: "met:6" - dataType: "integer" - aggregation: "count" - description: "No meaning, just used for test" - - - name: "met:7" - dataType: "integer" - aggregation: "count" - description: "No meaning, just used for test" - - - name: "met:8" - dataType: "integer" - aggregation: "sum" - description: "No meaning, just used for test" - - - name: "met:9" - dataType: "integer" - aggregation: "count" - description: "No meaning, just used for test" - - - name: "met:10" - dataType: "integer" - aggregation: "max" - description: "No meaning, just used for test" - - - name: "met:11" - dataType: "integer" - aggregation: "min" - description: "No meaning, just used for test" -dimensions: - - - name: "dim:0" - dataType: "date" - description: "A dimension of Blendb. Has 5 possible values." - - - name: "dim:1" - dataType: "date" - description: "A dimension of Blendb. Has 5 possible values." - - - name: "dim:2" - dataType: "integer" - description: "A dimension of Blendb. Has 5 possible values." - - - name: "dim:3" - dataType: "string" - description: "A dimension of Blendb. Has 5 possible values." - - - name: "dim:4" - dataType: "string" - description: "A dimension of Blendb. Has 5 possible values." - - - name: "dim:5" - dataType: "boolean" - description: "A dimension of Blendb. Has 2 possible values." - - - name: "dim:6" - dataType: "integer" - description: "A dimension of Blendb. Has 5 possible values." - - - name: "dim:7" - dataType: "integer" - description: "A dimension of Blendb. Has 5 possible values." - - - name: "dim:8" - dataType: "integer" - description: "A dimension of Blendb. Has 5 possible values." - - - name: "dim:9" - dataType: "integer" - parent: "dim:0" - relation: "day" - description: "A dimension of Blendb. Has 30 possible values." - - - name: "dim:10" - dataType: "integer" - parent: "dim:0" - relation: "month" - description: "A dimension of Blendb. Has 12 possible values." - - - name: "dim:11" - dataType: "integer" - parent: "dim:0" - relation: "year" - description: "A dimension of Blendb. Has 1 possible value." -enumTypes: - - - name: "enumtype:0" - values: - - "male" - - "female" - - "binary" - - "undecided" - - - name: "enumtype:1" - values: - - "test_4" - - "test_5" - - "test_6" - - "string" - - - name: "enumtype:2" - values: - - "test_7" - - "test_8" - - - name: "enumtype:3" - values: - - "test_9" -sources: - - - name: "source_0" - description: "source with 3 entries" - fields: - - - name: "fields:0" - description: "first entry" - dataType: "string" - - - name: "fields:1" - description: "second entry" - dataType: "string" - - - name: "fields:2" - description: "third entry" - dataType: "string" - - - name: "source_1" - description: "source with 2 entries" - fields: - - - name: "fields:0" - description: "first entry" - dataType: "enumtype" - enumType: "enumtype:0" - - - name: "fields:1" - description: "second entry" - dataType: "string" - - - name: "source_2" - description: "source with one entry and undefined dataType" - fields: - - - name: "fields:0" - description: "first entry" - dataType: "string" - - - name: "source_3" - description: "source with one entry and without description" - fields: + links: + - config/ci_views.yaml.example + obj: - - name: "fields:0" - dataType: "string" - - - name: "source_4" - description: "source with all core types from blendb" - fields: + alias: "View 0" + data: "test/postgres/fixtures/view0.json" + origin: true + dimensions: + - "dim:0" + - "dim:7" + metrics: + - "met:0" + - "met:1" + - "met:2" + - "met:10" +metrics: + links: + - config/ci_metrics.yaml.example + - config/ci_metrics_1.yaml.example + obj: - - name: "fields:0" - description: "first entry" + name: "met:0" dataType: "integer" - - - name: "fields:1" - description: "second entry" - dataType: "float" + aggregation: "sum" + description: "No meaning, just used for test" - - name: "fields:2" - description: "third entry" - dataType: "string" + name: "met:1" + dataType: "integer" + aggregation: "avg" + description: "No meaning, just used for test" +dimensions: + links: + - config/ci_dimensions.yaml.example + obj: - - name: "fields:3" - description: "fourth entry" - dataType: "boolean" + name: "dim:0" + dataType: "date" + description: "A dimension of Blendb. Has 5 possible values." - - name: "fields:4" - description: "fifth entry" + name: "dim:1" dataType: "date" + description: "A dimension of Blendb. Has 5 possible values." +enumTypes: + links: + - config/ci_enumtypes.yaml.example + obj: + - + name: "enumtype:0" + values: + - "male" + - "female" + - "binary" + - "undecided" +sources: + links: + - config/ci_sources.yaml.example + obj: + - + name: "source_0" + description: "source with 3 entries" + fields: + - + name: "fields:0" + description: "first entry" + dataType: "string" + - + name: "fields:1" + description: "second entry" + dataType: "string" + - + name: "fields:2" + description: "third entry" + dataType: "string" - \ No newline at end of file diff --git a/config/ci_views.yaml.example b/config/ci_views.yaml.example new file mode 100644 index 0000000000000000000000000000000000000000..0c7d954cc92f2a6a50d7a3e22e5d23c83d5fa27e --- /dev/null +++ b/config/ci_views.yaml.example @@ -0,0 +1,82 @@ +- + alias: "View 1" + data: "test/postgres/fixtures/view1.json" + origin: true + dimensions: + - "dim:1" + - "dim:8" + metrics: + - "met:3" + - "met:4" +- + alias: "View 2" + data: "test/postgres/fixtures/view2.json" + origin: true + dimensions: + - "dim:2" + metrics: + - "met:5" + - "met:6" + - "met:11" +- + alias: "View 3" + data: "test/postgres/fixtures/view3.json" + origin: true + dimensions: + - "dim:2" + - "dim:3" + - "dim:4" +- + alias: "View 4" + data: "test/postgres/fixtures/view4.json" + origin: true + dimensions: + - "dim:2" + - "dim:7" + - "dim:8" +- + alias: "View 5" + data: "test/postgres/fixtures/view5.json" + origin: true + dimensions: + - "dim:3" + metrics: + - "met:7" +- + alias: "View 6" + data: "test/postgres/fixtures/view6.json" + origin: true + dimensions: + - "dim:4" + metrics: + - "met:8" +- + alias: "View 7" + data: "test/postgres/fixtures/view7.json" + origin: true + dimensions: + - "dim:4" + - "dim:5" + - "dim:6" +- + alias: "View 8" + data: "test/postgres/fixtures/view8.json" + origin: true + dimensions: + - "dim:5" + - "dim:6" + metrics: + - "met:9" +- + alias: "view 9" + data: "test/postgres/fixtures/view9.json" + origin: false + dimensions: + - "dim:2" + metrics: + - "met:5" + - "met:6" + - "met:7" + clauses: + - "dim:2!=1" + diff --git a/src/util/configParser.ts b/src/util/configParser.ts index 0e845f88439f7ae88759516d558d3a1232e93f73..6ebf9d67e4972eedaea42cf8d2200f0b04dbf81c 100644 --- a/src/util/configParser.ts +++ b/src/util/configParser.ts @@ -57,15 +57,25 @@ export interface ViewParsingOptions { */ interface ConfigSchema { /** Options of all sources available */ - sources: SourceStrOptions[]; + sources: { obj: SourceStrOptions[], + links: string[], + }; /** Options of all views available */ - views: ViewParsingOptions[]; + views: { obj: ViewParsingOptions[], + links: string[], + }; /** Options of all metrics available */ - metrics: MetricStrOptions[]; + metrics: { obj: MetricStrOptions[], + links: string[], + }; /** Options of all dimensions available */ - dimensions: DimensionStrOptions[]; + dimensions: { obj: DimensionStrOptions[], + links: string[], + }; /** Options of all enumerable types available */ - enumTypes: EnumTypeOptions[]; + enumTypes: { obj: EnumTypeOptions[], + links: string[], + }; } /** Information required to build a SQL view code. */ @@ -164,11 +174,11 @@ export class ConfigParser { host: process.env.BLENDB_DB_HOST, port: parseInt(process.env.BLENDB_DB_PORT, 10) }; - let metricsOpts = config.metrics; - let viewsOpts = config.views; - let dimensionsOpts = config.dimensions; - let enumTypesOpts = config.enumTypes; - let sourcesOpts = config.sources; + let metricsOpts = config.metrics.obj; + let viewsOpts = config.views.obj; + let dimensionsOpts = config.dimensions.obj; + let enumTypesOpts = config.enumTypes.obj; + let sourcesOpts = config.sources.obj; let parsed: ParsedConfig = { adapter: process.env.BLENDB_ADAPTER || "postgres", connection: connection, @@ -179,7 +189,28 @@ export class ConfigParser { loadViews: [], buildViews: [], sources: [] - }; + }; + + for (let i = 0; i < config.sources.links.length; i++) { + sourcesOpts = sourcesOpts.concat(yaml.safeLoad(fs.readFileSync( + config.sources.links[i], { encoding: "utf-8"})) as SourceStrOptions[]); + } + for (let i = 0; i < config.views.links.length; i++) { + viewsOpts = viewsOpts.concat(yaml.safeLoad(fs.readFileSync( + config.views.links[i], { encoding: "utf-8"})) as ViewParsingOptions[]); + } + for (let i = 0; i < config.metrics.links.length; i++) { + metricsOpts = metricsOpts.concat(yaml.safeLoad(fs.readFileSync( + config.metrics.links[i], { encoding: "utf-8"})) as MetricStrOptions[]); + } + for (let i = 0; i < config.dimensions.links.length; i++) { + dimensionsOpts = dimensionsOpts.concat(yaml.safeLoad(fs.readFileSync( + config.dimensions.links[i], { encoding: "utf-8"})) as DimensionStrOptions[]); + } + for (let i = 0; i < config.enumTypes.links.length; i++) { + enumTypesOpts = enumTypesOpts.concat(yaml.safeLoad(fs.readFileSync( + config.enumTypes.links[i], { encoding: "utf-8"})) as EnumTypeOptions[]); + } let metMap: MetricMap = {}; let dimMap: DimensionMap = {};