Skip to content

Commit

Permalink
fix: docs pricing should include remote
Browse files Browse the repository at this point in the history
  • Loading branch information
blakebyrnes committed Jan 5, 2023
1 parent 576f4e5 commit ca7bd07
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 80 deletions.
137 changes: 64 additions & 73 deletions databox/docpage/src/App.vue
@@ -1,8 +1,8 @@
<template>
<Navbar />
<div class="App px-20 my-12">
<div class="App my-12 px-20">
<div class="flex flex-row">
<div class="w-10/12 mr-10">
<div class="mr-10 w-10/12">
<h1 class="text-4xl">{{ config.name }} Datastore</h1>

<p>{{ config.description }}</p>
Expand All @@ -14,15 +14,11 @@
<option value="postgres">Postgres</option>
</select>
</h2>
<Prism language="shell" v-if="exampleType === 'sql'">
npm install @ulixee/sql
</Prism>
<Prism language="shell" v-if="exampleType === 'sql'"> npm install @ulixee/sql </Prism>
<Prism language="shell" v-else-if="exampleType === 'stream'">
npm install @ulixee/stream
</Prism>
<Prism language="shell" v-else-if="exampleType === 'postgres'">
npm install pg
</Prism>
<Prism language="shell" v-else-if="exampleType === 'postgres'"> npm install pg </Prism>

<h2 class="mt-5">
Usage Example
Expand All @@ -33,37 +29,25 @@
</select>
</h2>
<Prism language="javascript" v-if="exampleType === 'sql'">
import Sql from '@ulixee/sql';

(async function () {
const stream = new Sql('ulx://');
sql.query('SELECT * FROM testers');
})();
import Sql from '@ulixee/sql'; (async function () { const stream = new Sql('ulx://');
sql.query('SELECT * FROM testers'); })();
</Prism>
<Prism language="javascript" v-if="exampleType === 'stream'">
import Stream from '@ulixee/stream';

(async function () {
const stream = new Stream('ulx://');
stream.addJob({});
})();
import Stream from '@ulixee/stream'; (async function () { const stream = new
Stream('ulx://'); stream.addJob({}); })();
</Prism>
<Prism language="javascript" v-if="exampleType === 'postgres'">
import { Client } from 'pg';

(async function () {
const client = new Client('ulx://');
client.query('SELECT * FROM testers');
})();
import { Client } from 'pg'; (async function () { const client = new Client('ulx://');
client.query('SELECT * FROM testers'); })();
</Prism>

<section v-if="tables.length" id="tables">
<h2 class="text-2xl font-bold">Tables</h2>
<div v-for="table of tables" class="mt-3">
<h3 class="text-xl font-bold">{{ table.name }}</h3>
{{ table.description }}
<div class="font-bold mt-2">Columns</div>

<div class="mt-2 font-bold">Columns</div>
<Fields :schema="table.schema" />
</div>
</section>
Expand All @@ -74,10 +58,10 @@
<h3 class="text-xl font-bold">{{ func.name }}</h3>
{{ func.description }}

<div class="font-bold mt-2">Input Params</div>
<div class="mt-2 font-bold">Input Params</div>
<Fields :schema="func.schema.input" />

<div class="font-bold mt-2">Output Fields</div>
<div class="mt-2 font-bold">Output Fields</div>
<Fields :schema="func.schema.output" />
</div>
</section>
Expand All @@ -91,16 +75,16 @@
</section>
</div>
<div class="w-2/12">
<div class="flex flex-col text-center bg-white border rounded-sm py-2">
<div class="text-5xl">₳{{avgPricePerQuery}}</div>
<div class="flex flex-col rounded-sm border bg-white py-2 text-center">
<div class="text-5xl">₳{{ avgPricePerQuery }}</div>
<div class="">Avg Price Per Query</div>
</div>

<div class="mt-2">
<em>Created:</em>
<div>{{ createdAt.format('MMMM D, YYYY') }}</div>
</div>

<div class="mt-2">
<em>Last Used:</em>
<div>{{ lastUsedAt.format('MMMM D, YYYY') }}</div>
Expand All @@ -118,45 +102,52 @@
</template>

<script lang="ts">
import * as Vue from 'vue';
import Moment from 'moment';
import Prism from './components/Prism.vue';
import Fields from './components/Fields.vue';
import Navbar from './components/Navbar.vue';
import config from './data.config.json';
import { formatCurrency } from './lib/Utils';
import * as Vue from 'vue';
import Moment from 'moment';
import Prism from './components/Prism.vue';
import Fields from './components/Fields.vue';
import Navbar from './components/Navbar.vue';
import config from './data.config.json';
import { formatCurrency } from './lib/Utils';
export default Vue.defineComponent({
components: {
Prism,
Fields,
Navbar,
},
setup() {
const { tablesByName, functionsByName, crawlersByName } = config as any;
const prices: number[] = [];
for (const func of Object.values(functionsByName) as any[]) {
let total = 0;
for (const price of func.prices) total += price.perQuery;
prices.push(total)
}
export default Vue.defineComponent({
components: {
Prism,
Fields,
Navbar
},
setup() {
const { tablesByName, functionsByName, crawlersByName } = config as any;
const avgPricePerQuery = Object.values(functionsByName || {}).reduce((num, x: any) => (num + x.pricePerQuery)/2, 0);
const createdAt = Moment(config.createdAt);
const yesterday = Moment().subtract(1, 'day');
const lastUsedAt = yesterday.isBefore(createdAt) ? createdAt : yesterday;
return {
config,
createdAt,
lastUsedAt,
tables: Object.values(tablesByName || {}),
functions: Object.values(functionsByName || {}),
crawlers: Object.values(crawlersByName || {}),
fields: [
{
name: 'test',
type: 'boolean',
description: 'testing',
}
],
avgPricePerQuery: formatCurrency(avgPricePerQuery as number),
exampleType: Vue.ref('sql'),
}
},
});
const avgPricePerQuery = prices.reduce((total, price) => total + price, 0) / prices.length;
const createdAt = Moment(config.createdAt);
const yesterday = Moment().subtract(1, 'day');
const lastUsedAt = yesterday.isBefore(createdAt) ? createdAt : yesterday;
return {
config,
createdAt,
lastUsedAt,
tables: Object.values(tablesByName || {}),
functions: Object.values(functionsByName || {}),
crawlers: Object.values(crawlersByName || {}),
fields: [
{
name: 'test',
type: 'boolean',
description: 'testing',
},
],
avgPricePerQuery: formatCurrency(avgPricePerQuery as number),
exampleType: Vue.ref('sql'),
};
},
});
</script>

<style lang="scss">
Expand All @@ -165,4 +156,4 @@
@apply mt-10;
}
}
</style>
</style>
7 changes: 6 additions & 1 deletion databox/docpage/src/data.config.json
Expand Up @@ -21,7 +21,12 @@
}
}
},
"pricePerQuery": 0
"prices": [
{
"minimum": 0,
"perQuery": 0
}
]
}
},
"tablesByName": {
Expand Down
4 changes: 2 additions & 2 deletions databox/packager/index.ts
Expand Up @@ -58,9 +58,9 @@ export default class DataboxPackager {
throw new Error('Databox must specify a coreVersion');
}
dbx.createOrUpdateDatabase(this.meta.tablesByName, this.meta.tableSeedlingsByName);

await dbx.createOrUpdateDocpage(this.meta, this.entrypoint);

await this.createOrUpdateManifest(sourceCode, sourceMap, options?.createNewVersionHistory);
await dbx.createOrUpdateDocpage(this.meta, this.manifest, this.entrypoint);
await dbx.save(options?.keepOpen);

return dbx;
Expand Down
8 changes: 4 additions & 4 deletions databox/packager/lib/DbxFile.ts
Expand Up @@ -71,7 +71,7 @@ export default class DbxFile {
db.close();
}

public async createOrUpdateDocpage(meta: IFetchMetaResponseData, entrypoint: string): Promise<void> {
public async createOrUpdateDocpage(meta: IFetchMetaResponseData, manifest: DataboxManifest, entrypoint: string): Promise<void> {
const docpageDir = Path.join(this.workingDirectory, 'docpage');
const name = meta.name || entrypoint.match(/([^/\\]+)\.(js|ts)$/)[1] || 'Untitled';

Expand All @@ -80,17 +80,17 @@ export default class DbxFile {
description: meta.description,
createdAt: new Date().toISOString(),
functionsByName: Object.keys(meta.functionsByName).reduce((obj, n) => {
return Object.assign(obj, {
return Object.assign(obj, {
[n]: {
name: n,
description: meta.functionsByName[n].description || '',
schema: meta.functionsByName[n].schema,
pricePerQuery: meta.functionsByName[n].pricePerQuery,
prices: manifest.functionsByName[n].prices
}
});
}, {}),
tablesByName: Object.keys(meta.tablesByName).reduce((obj, n) => {
return Object.assign(obj, {
return Object.assign(obj, {
[n]: {
name: n,
description: meta.tablesByName[n].description || '',
Expand Down

0 comments on commit ca7bd07

Please sign in to comment.