Skip to content

Commit ae08fab

Browse files
Peyton-McKeebracyw
andauthored
Use Datetime for cloud data (#363)
* Use Datetime for cloud data * cargo fmt * scylla- data is stored with microseconds epoch unix * fixed data_service test * fixed data service test * cargo fmt --------- Co-authored-by: wyattb <bracy.w@northeastern.edu>
1 parent c1b0990 commit ae08fab

8 files changed

Lines changed: 35 additions & 135 deletions

File tree

charybdis/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

charybdis/src/prisma/cloud-prisma/migrations/20250326225924_init/migration.sql renamed to charybdis/src/prisma/cloud-prisma/migrations/20250407210206_init/migration.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ CREATE TABLE "run" (
1212
-- CreateTable
1313
CREATE TABLE "data" (
1414
"values" DOUBLE PRECISION[],
15-
"time" BIGINT NOT NULL,
15+
"time" TIMESTAMPTZ NOT NULL,
1616
"dataTypeName" TEXT NOT NULL,
1717
"runId" TEXT NOT NULL,
1818

charybdis/src/prisma/cloud-prisma/schema.prisma

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ model run {
2525

2626
model data {
2727
values Float[]
28-
time BigInt @db.BigInt
28+
time DateTime @db.Timestamptz()
2929
3030
dataTypeName String
3131
dataType data_type @relation(fields: [dataTypeName], references: [name])

charybdis/src/services/upload.service.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ const csvNames = {
1818
async function checkDbConnection() {
1919
try {
2020
await cloudPrisma.$connect();
21-
await cloudPrisma;
2221
} catch (error) {
2322
throw new CouldNotConnectToCloudDB();
2423
}
@@ -138,7 +137,17 @@ export async function processCsvDataFile(
138137

139138
let numOfData = cloudData.length;
140139
await cloudPrisma.data.createMany({
141-
data: cloudData,
140+
data: cloudData.map((data) => {
141+
// JS Dates only work with maximum precision of miliseconds,
142+
// however psql / prisma doesnt care about that as long as its in iso form,
143+
// so manually add the microseconds into the date string
144+
const miliseconds = Number(data.time / 1000n);
145+
const date = new Date(miliseconds);
146+
const formattedISODate = `${date.toISOString().split("Z")[0]}${Number(
147+
data.time % 1000n
148+
)}Z`;
149+
return { ...data, time: formattedISODate };
150+
}),
142151
skipDuplicates: true,
143152
});
144153

charybdis/yarn.lock

Lines changed: 6 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -9,126 +9,11 @@
99
dependencies:
1010
"@jridgewell/trace-mapping" "0.3.9"
1111

12-
"@esbuild/aix-ppc64@0.23.1":
13-
version "0.23.1"
14-
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353"
15-
integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==
16-
17-
"@esbuild/android-arm64@0.23.1":
18-
version "0.23.1"
19-
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018"
20-
integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==
21-
22-
"@esbuild/android-arm@0.23.1":
23-
version "0.23.1"
24-
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee"
25-
integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==
26-
27-
"@esbuild/android-x64@0.23.1":
28-
version "0.23.1"
29-
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517"
30-
integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==
31-
3212
"@esbuild/darwin-arm64@0.23.1":
3313
version "0.23.1"
3414
resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz"
3515
integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==
3616

37-
"@esbuild/darwin-x64@0.23.1":
38-
version "0.23.1"
39-
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931"
40-
integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==
41-
42-
"@esbuild/freebsd-arm64@0.23.1":
43-
version "0.23.1"
44-
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc"
45-
integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==
46-
47-
"@esbuild/freebsd-x64@0.23.1":
48-
version "0.23.1"
49-
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730"
50-
integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==
51-
52-
"@esbuild/linux-arm64@0.23.1":
53-
version "0.23.1"
54-
resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz"
55-
integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==
56-
57-
"@esbuild/linux-arm@0.23.1":
58-
version "0.23.1"
59-
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771"
60-
integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==
61-
62-
"@esbuild/linux-ia32@0.23.1":
63-
version "0.23.1"
64-
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333"
65-
integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==
66-
67-
"@esbuild/linux-loong64@0.23.1":
68-
version "0.23.1"
69-
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac"
70-
integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==
71-
72-
"@esbuild/linux-mips64el@0.23.1":
73-
version "0.23.1"
74-
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6"
75-
integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==
76-
77-
"@esbuild/linux-ppc64@0.23.1":
78-
version "0.23.1"
79-
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96"
80-
integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==
81-
82-
"@esbuild/linux-riscv64@0.23.1":
83-
version "0.23.1"
84-
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7"
85-
integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==
86-
87-
"@esbuild/linux-s390x@0.23.1":
88-
version "0.23.1"
89-
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f"
90-
integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==
91-
92-
"@esbuild/linux-x64@0.23.1":
93-
version "0.23.1"
94-
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24"
95-
integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==
96-
97-
"@esbuild/netbsd-x64@0.23.1":
98-
version "0.23.1"
99-
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653"
100-
integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==
101-
102-
"@esbuild/openbsd-arm64@0.23.1":
103-
version "0.23.1"
104-
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7"
105-
integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==
106-
107-
"@esbuild/openbsd-x64@0.23.1":
108-
version "0.23.1"
109-
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273"
110-
integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==
111-
112-
"@esbuild/sunos-x64@0.23.1":
113-
version "0.23.1"
114-
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403"
115-
integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==
116-
117-
"@esbuild/win32-arm64@0.23.1":
118-
version "0.23.1"
119-
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2"
120-
integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==
121-
122-
"@esbuild/win32-ia32@0.23.1":
123-
version "0.23.1"
124-
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac"
125-
integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==
126-
127-
"@esbuild/win32-x64@0.23.1":
128-
version "0.23.1"
129-
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699"
130-
integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==
131-
13217
"@inquirer/checkbox@^4.1.1":
13318
version "4.1.1"
13419
resolved "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.1.tgz"
@@ -301,7 +186,7 @@
301186

302187
"@prisma/client@6.2.1":
303188
version "6.2.1"
304-
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-6.2.1.tgz#3d7d0c8669bba490247e1ffff67b93a516bd789f"
189+
resolved "https://registry.npmjs.org/@prisma/client/-/client-6.2.1.tgz"
305190
integrity sha512-msKY2iRLISN8t5X0Tj7hU0UWet1u0KuxSPHWuf3IRkB4J95mCvGpyQBfQ6ufcmvKNOMQSq90O2iUmJEN2e5fiA==
306191

307192
"@prisma/debug@6.2.1":
@@ -424,7 +309,7 @@
424309
resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz"
425310
integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
426311

427-
"@types/node@*", "@types/node@^22.13.1":
312+
"@types/node@*", "@types/node@^22.13.1", "@types/node@>=18":
428313
version "22.13.1"
429314
resolved "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz"
430315
integrity sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==
@@ -585,7 +470,7 @@ external-editor@^3.1.0:
585470
iconv-lite "^0.4.24"
586471
tmp "^0.0.33"
587472

588-
fsevents@2.3.3, fsevents@~2.3.3:
473+
fsevents@~2.3.3, fsevents@2.3.3:
589474
version "2.3.3"
590475
resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
591476
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
@@ -624,9 +509,9 @@ os-tmpdir@~1.0.2:
624509
resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz"
625510
integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
626511

627-
prisma@6.2.1:
512+
prisma@*, prisma@6.2.1:
628513
version "6.2.1"
629-
resolved "https://registry.yarnpkg.com/prisma/-/prisma-6.2.1.tgz#457b210326d66d0e6f583cc6f9cd2819b984408f"
514+
resolved "https://registry.npmjs.org/prisma/-/prisma-6.2.1.tgz"
630515
integrity sha512-hhyM0H13pQleQ+br4CkzGizS5I0oInoeTw3JfLw1BRZduBSQxPILlJLwi+46wZzj9Je7ndyQEMGw/n5cN2fknA==
631516
dependencies:
632517
"@prisma/engines" "6.2.1"
@@ -705,7 +590,7 @@ type-fest@^0.21.3:
705590
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz"
706591
integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
707592

708-
typescript@^5.7.3:
593+
typescript@^5.7.3, typescript@>=2.7:
709594
version "5.7.3"
710595
resolved "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz"
711596
integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==

scylla-server/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ impl From<ClientData> for models::DataInsert {
9494
models::DataInsert {
9595
values: val.values,
9696
dataTypeName: val.name,
97-
time: val.timestamp.timestamp_millis(),
97+
time: val.timestamp.timestamp_micros(),
9898
runId: val.run_id,
9999
}
100100
}

scylla-server/src/main.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ use tower_http::{
4545
cors::{Any, CorsLayer},
4646
trace::TraceLayer,
4747
};
48-
use tracing::{debug, info, level_filters::LevelFilter};
48+
use tracing::{debug, info, level_filters::LevelFilter, warn};
4949
use tracing_subscriber::{fmt::format::FmtSpan, EnvFilter};
5050

5151
#[cfg(not(target_env = "msvc"))]
@@ -112,6 +112,10 @@ struct ScyllaArgs {
112112
)]
113113
socketio_discard_percent: u8,
114114

115+
/// The port to bind scylla to
116+
#[arg(short = 'p', long, env = "SCYLLA_PORT", default_value = "8000")]
117+
port: u16,
118+
115119
/// Whether to disable sending of metadata over the socket to the client
116120
#[arg(long, env = "SCYLLA_SOCKET_DISABLE_METADATA")]
117121
no_metadata: bool,
@@ -167,11 +171,13 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
167171
let conn: AsyncPgConnection = AsyncPgConnection::establish(&db_url).await?;
168172
let mut async_wrapper: AsyncConnectionWrapper<AsyncPgConnection> =
169173
AsyncConnectionWrapper::from(conn);
170-
tokio::task::spawn_blocking(move || {
171-
async_wrapper.run_pending_migrations(MIGRATIONS).unwrap();
172-
})
174+
tokio::task::spawn_blocking(
175+
move || match async_wrapper.run_pending_migrations(MIGRATIONS) {
176+
Ok(_res) => info!("Successfully migrated DB!"),
177+
Err(e) => warn!("Encountered Error: {}", e),
178+
},
179+
)
173180
.await?;
174-
info!("Successfully migrated DB!");
175181

176182
info!("Initializing database connections...");
177183
let manager = AsyncDieselConnectionManager::<AsyncPgConnection>::new(db_url);
@@ -333,7 +339,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
333339
.layer(TraceLayer::new_for_http())
334340
.with_state(pool.clone());
335341

336-
let listener = tokio::net::TcpListener::bind("0.0.0.0:8000")
342+
let listener = tokio::net::TcpListener::bind(format!("0.0.0.0:{}", cli.port))
337343
.await
338344
.expect("Could not bind to 8000!");
339345
let axum_token = token.clone();

scylla-server/tests/data_service_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ async fn test_data_add() -> Result<(), diesel::result::Error> {
5252
unit: "A".to_owned(),
5353
run_id: run_data.runId,
5454
name: TEST_KEYWORD.to_owned(),
55-
timestamp: chrono::DateTime::from_timestamp_millis(1000).unwrap(),
55+
timestamp: chrono::DateTime::from_timestamp_micros(1000).unwrap(),
5656
},
5757
)
5858
.await?;

0 commit comments

Comments
 (0)