Skip to content

Commit 5f1dc60

Browse files
authored
Correctly replace sampledata file path for database connections too (#254)
* Fix for format * Handle unpacking asar * External asar * Add mkdir * One more missing asar external * Copy in asar * Add sampledata
1 parent be02e61 commit 5f1dc60

File tree

8 files changed

+80
-15
lines changed

8 files changed

+80
-15
lines changed

desktop/scripts/desktop.build

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ setenv_default VERSION "development"
66
cd runner && go build -trimpath -buildmode=pie -mod=readonly -modcacherw -ldflags="-s -w -X main.VERSION={VERSION}" -o ../build/go_desktop_runner{required_ext} cmd/main.go
77

88
yarn esbuild desktop/preload.ts --external:electron --sourcemap --bundle --outfile=build/preload.js
9-
yarn esbuild desktop/runner.ts --bundle --platform=node --sourcemap --external:better-sqlite3 --external:react-native-fs --external:react-native-fetch-blob "--external:@elastic/elasticsearch" "--external:wasm-brotli" --external:prometheus-query --external:snowflake-sdk --external:ssh2 --external:ssh2-promise --external:ssh2-sftp-client --external:cpu-features --external:electron --target=node10.4 --outfile=build/desktop_runner.js
10-
yarn esbuild desktop/app.ts --bundle --platform=node --sourcemap --external:better-sqlite3 --external:react-native-fs --external:react-native-fetch-blob "--external:@elastic/elasticsearch" "--external:wasm-brotli" --external:prometheus-query --external:snowflake-sdk --external:ssh2 --external:ssh2-promise --external:ssh2-sftp-client --external:cpu-features --external:electron --target=node10.4 --outfile=build/desktop.js
9+
yarn esbuild desktop/runner.ts --bundle --platform=node --sourcemap --external:better-sqlite3 --external:react-native-fs --external:asar --external:react-native-fetch-blob "--external:@elastic/elasticsearch" "--external:wasm-brotli" --external:prometheus-query --external:snowflake-sdk --external:ssh2 --external:ssh2-promise --external:ssh2-sftp-client --external:cpu-features --external:electron --target=node10.4 --outfile=build/desktop_runner.js
10+
yarn esbuild desktop/app.ts --bundle --platform=node --sourcemap --external:better-sqlite3 --external:react-native-fs --external:react-native-fetch-blob "--external:@elastic/elasticsearch" "--external:wasm-brotli" --external:prometheus-query --external:snowflake-sdk --external:ssh2 --external:ssh2-promise --external:asar --external:ssh2-sftp-client --external:cpu-features --external:electron --target=node10.4 --outfile=build/desktop.js
1111

1212
rm -rf build/migrations
1313
cp -r desktop/migrations build/migrations

desktop/store.ts

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import asar from 'asar';
12
import * as sqlite3 from 'better-sqlite3';
23
import { Buffer } from 'buffer';
34
import fs from 'fs';
@@ -7,6 +8,7 @@ import { getPath } from '../shared/object';
78
import { GetProjectRequest, MakeProjectRequest } from '../shared/rpc';
89
import {
910
ConnectorInfo,
11+
DatabaseConnectorInfo,
1012
DatabasePanelInfo,
1113
doOnEncryptFields,
1214
Encrypt,
@@ -185,7 +187,11 @@ export class Store {
185187
const name = f.slice(0, f.length - ('.' + PROJECT_EXTENSION).length);
186188
return { createdAt, name };
187189
});
188-
files.sort();
190+
// Sort timestamp DESC
191+
files.sort(
192+
(a, b) =>
193+
new Date(b.createdAt).valueOf() - new Date(a.createdAt).valueOf()
194+
);
189195
return files;
190196
},
191197
};
@@ -378,17 +384,56 @@ GROUP BY panel_id
378384
},
379385
};
380386

387+
// Example: /private/var/folders/l0/51ds3d1d2214wb1y0vbtl5qr0000gn/T/AppTranslocation/6AC58880-BE22-4AB7-8006-47D9764BC590/d/DataStation Desktop CE.app/Contents/Resources/app.asar/sampledata/nginx_logs.jsonl
388+
unmangleAsar(file: string): string {
389+
const asarName = 'app.asar';
390+
if (!file.includes(asarName)) {
391+
return file;
392+
}
393+
394+
// Since Go reads from the filesystem it doesn't look into the asar that is used in release builds. So we need to extract it if it doesn't exist.
395+
const [asarParent, fileName] = file.split(asarName);
396+
const asarFile = asarParent + asarName;
397+
const newFile = path.join(asarParent, fileName);
398+
// TODO: if these files change then checksum will be needed
399+
if (!fs.existsSync(newFile)) {
400+
fs.mkdirSync(path.dirname(newFile), { recursive: true });
401+
fs.writeFileSync(
402+
newFile,
403+
asar.extractFile(asarFile, fileName.slice(1) /* drop leading / */)
404+
);
405+
}
406+
407+
return newFile;
408+
}
409+
381410
cleanupSampleProject(sampleProject: ProjectState) {
382411
for (const page of sampleProject.pages || []) {
383412
for (const panel of page.panels || []) {
384413
if (panel.type === 'file') {
385414
const fp = panel as FilePanelInfo;
386415
if (fp.file.name.startsWith('sampledata')) {
387-
fp.file.name = path.join(CODE_ROOT, fp.file.name);
416+
fp.file.name = this.unmangleAsar(
417+
path.join(CODE_ROOT, fp.file.name)
418+
);
388419
}
389420
}
390421
}
391422
}
423+
424+
for (const con of sampleProject.connectors || []) {
425+
if (con.type === 'database') {
426+
const dc = con as DatabaseConnectorInfo;
427+
if (
428+
dc.database.type === 'sqlite' &&
429+
dc.database.database.startsWith('sampledata')
430+
) {
431+
dc.database.database = this.unmangleAsar(
432+
path.join(CODE_ROOT, dc.database.database)
433+
);
434+
}
435+
}
436+
}
392437
}
393438

394439
makeProjectHandler: MakeProjectHandler = {

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"dependencies": {
2929
"@tabler/icons": "^1.68.0",
3030
"ace-builds": "^1.5.0",
31+
"asar": "^3.1.0",
3132
"better-sqlite3": "^7.5.3",
3233
"chart.js": "^3.7.1",
3334
"cookie-parser": "^1.4.6",

runner/scripts/runner_test.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
yarn esbuild desktop/runner.ts --bundle --platform=node --sourcemap --external:sqlite3 --external:react-native-fs --external:react-native-fetch-blob --external:oracledb "--external:@elastic/elasticsearch" "--external:wasm-brotli" --external:prometheus-query --external:snowflake-sdk --external:ssh2 --external:ssh2-promise --external:ssh2-sftp-client --external:cpu-features --external:electron --external:pg-native --target=node10.4 --outfile=build/desktop_runner.js
1+
yarn esbuild desktop/runner.ts --bundle --platform=node --sourcemap --external:sqlite3 --external:asar --external:react-native-fs --external:react-native-fetch-blob --external:oracledb "--external:@elastic/elasticsearch" "--external:wasm-brotli" --external:prometheus-query --external:snowflake-sdk --external:ssh2 --external:ssh2-promise --external:ssh2-sftp-client --external:cpu-features --external:electron --external:pg-native --target=node10.4 --outfile=build/desktop_runner.js
22

33
cd runner/cmd && go test -trimpath -mod=readonly -modcacherw -ldflags="-s -w" -race -o ../../build/go_desktop_runner_test{required_ext} -coverpkg="." -c -tags testrunmain

scripts/build.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,15 @@ def eval_line(line):
168168
quote_line(line, show=True)
169169
if not what:
170170
return
171-
with open(to, 'rb+') as to:
172-
current = to.read()
173-
to.seek(0)
174-
to.write(what.encode()+b'\n'+current)
175-
to.truncate()
171+
try:
172+
with open(to, 'rb+') as to:
173+
current = to.read()
174+
to.seek(0)
175+
to.write(what.encode()+b'\n'+current)
176+
to.truncate()
177+
except FileNotFoundError:
178+
with open(to, 'w') as to:
179+
to.write(what)
176180
return
177181

178182
quote_line(line, show=True)

server/scripts/release.build

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,14 @@ mkdir datastation
1313
mkdir datastation/node_modules
1414
mv build datastation/
1515

16+
# Bring in sampledata
17+
cp -r sampledata datastation/sampledata
18+
1619
# Bring in node_modules
17-
cp -r node_modules/electron datastation/node_modules/electron
18-
cp -r node_modules/better-sqlite3 datastation/node_modules/better-sqlite3
20+
prepend "{{}}" datastation/package.json
21+
cd datastation && yarn add asar electron better-sqlite3
22+
rm datastation/yarn.lock
23+
rm datastation/package.json
1924
# Only need stubs not full chrome install
2025
rm -rf datastation/node_modules/electron/dist
2126

server/scripts/server.build

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ yarn build-ui
66

77
cd runner && go build -trimpath -buildmode=pie -mod=readonly -modcacherw -ldflags="-s -w" -o ../build/go_server_runner{required_ext} ./cmd/main.go
88

9-
yarn esbuild server/runner.ts --sourcemap --platform=node --bundle --target=node10.4 --external:sqlite3 --external:react-native-fs --external:react-native-fetch-blob --external:cpu-features --external:electron --outfile=build/server_runner.js
10-
yarn esbuild server/index.ts --sourcemap --platform=node --bundle --external:sqlite3 --external:react-native-fs --external:react-native-fetch-blob --external:cpu-features --external:electron --outfile=build/server.js
9+
yarn esbuild server/runner.ts --sourcemap --platform=node --bundle --target=node10.4 --external:sqlite3 --external:asar --external:react-native-fs --external:react-native-fetch-blob --external:cpu-features --external:electron --outfile=build/server_runner.js
10+
yarn esbuild server/index.ts --sourcemap --platform=node --bundle --external:sqlite3 --external:react-native-fs --external:asar --external:react-native-fetch-blob --external:cpu-features --external:electron --outfile=build/server.js
1111

1212
prepend "global.DS_UI_TITLE='DataStation Server CE';" build/server.js
1313

ui/style.css

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
/* Generic settings */
1818
--sans-serif: 'San Francisco', 'Gadugi', sans-serif;
1919
--margin-base: 8px;
20+
--label-width: 100px;
2021
}
2122

2223
* {
@@ -201,7 +202,7 @@ label,
201202
.select-label {
202203
display: inline-block;
203204
text-align: right;
204-
width: 100px;
205+
width: var(--label-width);
205206
padding-right: calc(2 * var(--margin-base));
206207
overflow-wrap: break-word;
207208
}
@@ -599,6 +600,11 @@ input + input[type='file'] {
599600
.connector-body,
600601
.server-body {
601602
overflow-x: auto;
603+
604+
input,
605+
select {
606+
max-width: 250px;
607+
}
602608
}
603609

604610
.radio-label,
@@ -1121,6 +1127,10 @@ canvas {
11211127
width: 500px;
11221128
margin: 0 auto;
11231129
margin-top: calc(2 * var(--margin-base));
1130+
1131+
.select select {
1132+
max-width: 300px !important;
1133+
}
11241134
}
11251135

11261136
.card--full {

0 commit comments

Comments
 (0)