mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-30 12:11:56 +00:00
Merge pull request #2635 from Start9Labs/feature/registry-metrics
Feature/registry analytics
This commit is contained in:
2
Makefile
2
Makefile
@@ -228,7 +228,7 @@ system-images/binfmt/docker-images/$(ARCH).tar: $(BINFMT_SRC)
|
|||||||
cd system-images/binfmt && make docker-images/$(ARCH).tar && touch docker-images/$(ARCH).tar
|
cd system-images/binfmt && make docker-images/$(ARCH).tar && touch docker-images/$(ARCH).tar
|
||||||
|
|
||||||
$(BINS): $(CORE_SRC) $(ENVIRONMENT_FILE)
|
$(BINS): $(CORE_SRC) $(ENVIRONMENT_FILE)
|
||||||
cd core && ARCH=$(ARCH) ./build-prod.sh
|
cd core && ARCH=$(ARCH) ./build-startos-bins.sh
|
||||||
touch $(BINS)
|
touch $(BINS)
|
||||||
|
|
||||||
web/node_modules/.package-lock.json: web/package.json sdk/dist
|
web/node_modules/.package-lock.json: web/package.json sdk/dist
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "INSERT INTO network_keys (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO NOTHING",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Bytea"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "1ce5254f27de971fd87f5ab66d300f2b22433c86617a0dbf796bf2170186dd2e"
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "DELETE FROM ssh_keys WHERE fingerprint = $1",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "21471490cdc3adb206274cc68e1ea745ffa5da4479478c1fd2158a45324b1930"
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT hostname, path, username, password FROM cifs_shares WHERE id = $1",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "hostname",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 1,
|
|
||||||
"name": "path",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 2,
|
|
||||||
"name": "username",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 3,
|
|
||||||
"name": "password",
|
|
||||||
"type_info": "Text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Int4"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
true
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "28ea34bbde836e0618c5fc9bb7c36e463c20c841a7d6a0eb15be0f24f4a928ec"
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "DELETE FROM tor WHERE package = $1 AND interface = $2",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "350ab82048fb4a049042e4fdbe1b8c606ca400e43e31b9a05d2937217e0f6962"
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT * FROM ssh_keys WHERE fingerprint = $1",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "fingerprint",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 1,
|
|
||||||
"name": "openssh_pubkey",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 2,
|
|
||||||
"name": "created_at",
|
|
||||||
"type_info": "Text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "4099028a5c0de578255bf54a67cef6cb0f1e9a4e158260700f1639dd4b438997"
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT * FROM session WHERE logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "id",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 1,
|
|
||||||
"name": "logged_in",
|
|
||||||
"type_info": "Timestamp"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 2,
|
|
||||||
"name": "logged_out",
|
|
||||||
"type_info": "Timestamp"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 3,
|
|
||||||
"name": "last_active",
|
|
||||||
"type_info": "Timestamp"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 4,
|
|
||||||
"name": "user_agent",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 5,
|
|
||||||
"name": "metadata",
|
|
||||||
"type_info": "Text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": []
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "4691e3a2ce80b59009ac17124f54f925f61dc5ea371903e62cdffa5d7b67ca96"
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "UPDATE session SET logged_out = CURRENT_TIMESTAMP WHERE id = $1",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "4bcfbefb1eb3181343871a1cd7fc3afb81c2be5c681cfa8b4be0ce70610e9c3a"
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT password FROM account",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "password",
|
|
||||||
"type_info": "Text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": []
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "629be61c3c341c131ddbbff0293a83dbc6afd07cae69d246987f62cf0cc35c2a"
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT key FROM tor WHERE package = $1 AND interface = $2",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "key",
|
|
||||||
"type_info": "Bytea"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "687688055e63d27123cdc89a5bbbd8361776290a9411d527eaf1fdb40bef399d"
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "UPDATE session SET last_active = CURRENT_TIMESTAMP WHERE id = $1 AND logged_out IS NULL OR logged_out > CURRENT_TIMESTAMP",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "6d35ccf780fb2bb62586dd1d3df9c1550a41ee580dad3f49d35cb843ebef10ca"
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "INSERT INTO network_keys (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO UPDATE SET package = EXCLUDED.package RETURNING key",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "key",
|
|
||||||
"type_info": "Bytea"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Bytea"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "770c1017734720453dc87b58c385b987c5af5807151ff71a59000014586752e0"
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT id, package_id, created_at, code, level, title, message, data FROM notifications WHERE id < $1 ORDER BY id DESC LIMIT $2",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "id",
|
|
||||||
"type_info": "Int4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 1,
|
|
||||||
"name": "package_id",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 2,
|
|
||||||
"name": "created_at",
|
|
||||||
"type_info": "Timestamp"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 3,
|
|
||||||
"name": "code",
|
|
||||||
"type_info": "Int4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 4,
|
|
||||||
"name": "level",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 5,
|
|
||||||
"name": "title",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 6,
|
|
||||||
"name": "message",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 7,
|
|
||||||
"name": "data",
|
|
||||||
"type_info": "Text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Int4",
|
|
||||||
"Int8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
true
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "7b64f032d507e8ffe37c41f4c7ad514a66c421a11ab04c26d89a7aa8f6b67210"
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "\n INSERT INTO account (\n id,\n server_id,\n hostname,\n password,\n network_key,\n root_ca_key_pem,\n root_ca_cert_pem\n ) VALUES (\n 0, $1, $2, $3, $4, $5, $6\n ) ON CONFLICT (id) DO UPDATE SET\n server_id = EXCLUDED.server_id,\n hostname = EXCLUDED.hostname,\n password = EXCLUDED.password,\n network_key = EXCLUDED.network_key,\n root_ca_key_pem = EXCLUDED.root_ca_key_pem,\n root_ca_cert_pem = EXCLUDED.root_ca_cert_pem\n ",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Bytea",
|
|
||||||
"Text",
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "7c7a3549c997eb75bf964ea65fbb98a73045adf618696cd838d79203ef5383fb"
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "DELETE FROM tor WHERE package = $1",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "7e0649d839927e57fa03ee51a2c9f96a8bdb0fc97ee8a3c6df1069e1e2b98576"
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "INSERT INTO tor (package, interface, key) VALUES ($1, $2, $3) ON CONFLICT (package, interface) DO NOTHING",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Bytea"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "8951b9126fbf60dbb5997241e11e3526b70bccf3e407327917294a993bc17ed5"
|
|
||||||
}
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT id, package_id, created_at, code, level, title, message, data FROM notifications ORDER BY id DESC LIMIT $1",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "id",
|
|
||||||
"type_info": "Int4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 1,
|
|
||||||
"name": "package_id",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 2,
|
|
||||||
"name": "created_at",
|
|
||||||
"type_info": "Timestamp"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 3,
|
|
||||||
"name": "code",
|
|
||||||
"type_info": "Int4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 4,
|
|
||||||
"name": "level",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 5,
|
|
||||||
"name": "title",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 6,
|
|
||||||
"name": "message",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 7,
|
|
||||||
"name": "data",
|
|
||||||
"type_info": "Text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Int8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
true
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "94d471bb374b4965c6cbedf8c17bbf6bea226d38efaf6559923c79a36d5ca08c"
|
|
||||||
}
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT id, hostname, path, username, password FROM cifs_shares",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "id",
|
|
||||||
"type_info": "Int4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 1,
|
|
||||||
"name": "hostname",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 2,
|
|
||||||
"name": "path",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 3,
|
|
||||||
"name": "username",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 4,
|
|
||||||
"name": "password",
|
|
||||||
"type_info": "Text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": []
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
true
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "95c4ab4c645f3302568c6ff13d85ab58252362694cf0f56999bf60194d20583a"
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "DELETE FROM cifs_shares WHERE id = $1",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Int4"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "a60d6e66719325b08dc4ecfacaf337527233c84eee758ac9be967906e5841d27"
|
|
||||||
}
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT fingerprint, openssh_pubkey, created_at FROM ssh_keys",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "fingerprint",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 1,
|
|
||||||
"name": "openssh_pubkey",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 2,
|
|
||||||
"name": "created_at",
|
|
||||||
"type_info": "Text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": []
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "a6b0c8909a3a5d6d9156aebfb359424e6b5a1d1402e028219e21726f1ebd282e"
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "UPDATE cifs_shares SET hostname = $1, path = $2, username = $3, password = $4 WHERE id = $5",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Int4"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "b1147beaaabbed89f2ab8c1e13ec4393a9a8fde2833cf096af766a979d94dee6"
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "DELETE FROM network_keys WHERE package = $1",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "b203820ee1c553a4b246eac74b79bd10d5717b2a0ddecf22330b7d531aac7c5d"
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "UPDATE account SET tor_key = NULL, network_key = gen_random_bytes(32)",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": []
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "b81592b3a74940ab56d41537484090d45cfa4c85168a587b1a41dc5393cccea1"
|
|
||||||
}
|
|
||||||
16
core/startos/.sqlx/query-bc9382d34bf93f468c64d0d02613452e7a69768da179e78479cd35ee42b493ae.json
generated
Normal file
16
core/startos/.sqlx/query-bc9382d34bf93f468c64d0d02613452e7a69768da179e78479cd35ee42b493ae.json
generated
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "INSERT INTO user_activity (created_at, server_id, arch) VALUES ($1, $2, $3)",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Timestamptz",
|
||||||
|
"Varchar",
|
||||||
|
"Varchar"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "bc9382d34bf93f468c64d0d02613452e7a69768da179e78479cd35ee42b493ae"
|
||||||
|
}
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT openssh_pubkey FROM ssh_keys",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "openssh_pubkey",
|
|
||||||
"type_info": "Text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": []
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "d5117054072476377f3c4f040ea429d4c9b2cf534e76f35c80a2bf60e8599cca"
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "INSERT INTO notifications (package_id, code, level, title, message, data) VALUES ($1, $2, $3, $4, $5, $6)",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Int4",
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "da71f94b29798d1738d2b10b9a721ea72db8cfb362e7181c8226d9297507c62b"
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "DELETE FROM network_keys WHERE package = $1 AND interface = $2",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "dfc23b7e966c3853284753a7e934351ba0cae3825988b3e0ecd3b6781bcff524"
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "DELETE FROM notifications WHERE id = $1",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Int4"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "e185203cf84e43b801dfb23b4159e34aeaef1154dcd3d6811ab504915497ccf7"
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT tor_key FROM account WHERE id = 0",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "tor_key",
|
|
||||||
"type_info": "Bytea"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": []
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
true
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "e545696735f202f9d13cf22a561f3ff3f9aed7f90027a9ba97634bcb47d772f0"
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "INSERT INTO session (id, user_agent, metadata) VALUES ($1, $2, $3)",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "e5843c5b0e7819b29aa1abf2266799bd4f82e761837b526a0972c3d4439a264d"
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "\n SELECT\n network_keys.package,\n network_keys.interface,\n network_keys.key,\n tor.key AS \"tor_key?\"\n FROM\n network_keys\n LEFT JOIN\n tor\n ON\n network_keys.package = tor.package\n AND\n network_keys.interface = tor.interface\n WHERE\n network_keys.package = $1\n ",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "package",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 1,
|
|
||||||
"name": "interface",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 2,
|
|
||||||
"name": "key",
|
|
||||||
"type_info": "Bytea"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 3,
|
|
||||||
"name": "tor_key?",
|
|
||||||
"type_info": "Bytea"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "e95322a8e2ae3b93f1e974b24c0b81803f1e9ec9e8ebbf15cafddfc1c5a028ed"
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "DELETE FROM notifications WHERE id < $1",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Int4"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "eb750adaa305bdbf3c5b70aaf59139c7b7569602adb58f2d6b3a94da4f167b0a"
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "INSERT INTO cifs_shares (hostname, path, username, password) VALUES ($1, $2, $3, $4) RETURNING id",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "id",
|
|
||||||
"type_info": "Int4"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "ecc765d8205c0876956f95f76944ac6a5f34dd820c4073b7728c7067aab9fded"
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "INSERT INTO ssh_keys (fingerprint, openssh_pubkey, created_at) VALUES ($1, $2, $3)",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Text",
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "f6d1c5ef0f9d9577bea8382318967b9deb46da75788c7fe6082b43821c22d556"
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT network_key FROM account WHERE id = 0",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "network_key",
|
|
||||||
"type_info": "Bytea"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": []
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "f7d2dae84613bcef330f7403352cc96547f3f6dbec11bf2eadfaf53ad8ab51b5"
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT * FROM account WHERE id = 0",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "id",
|
|
||||||
"type_info": "Int4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 1,
|
|
||||||
"name": "password",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 2,
|
|
||||||
"name": "tor_key",
|
|
||||||
"type_info": "Bytea"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 3,
|
|
||||||
"name": "server_id",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 4,
|
|
||||||
"name": "hostname",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 5,
|
|
||||||
"name": "network_key",
|
|
||||||
"type_info": "Bytea"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 6,
|
|
||||||
"name": "root_ca_key_pem",
|
|
||||||
"type_info": "Text"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 7,
|
|
||||||
"name": "root_ca_cert_pem",
|
|
||||||
"type_info": "Text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": []
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
true,
|
|
||||||
true,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "fe6e4f09f3028e5b6b6259e86cbad285680ce157aae9d7837ac020c8b2945e7f"
|
|
||||||
}
|
|
||||||
@@ -42,7 +42,7 @@ cli = []
|
|||||||
container-runtime = []
|
container-runtime = []
|
||||||
daemon = []
|
daemon = []
|
||||||
registry = []
|
registry = []
|
||||||
default = ["cli", "daemon", "registry"]
|
default = ["cli", "daemon"]
|
||||||
dev = []
|
dev = []
|
||||||
unstable = ["console-subscriber", "tokio/tracing"]
|
unstable = ["console-subscriber", "tokio/tracing"]
|
||||||
docker = []
|
docker = []
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ use rpc_toolkit::{CallRemote, Context, Empty};
|
|||||||
use tokio::sync::{broadcast, Mutex, RwLock};
|
use tokio::sync::{broadcast, Mutex, RwLock};
|
||||||
use tokio::time::Instant;
|
use tokio::time::Instant;
|
||||||
use tracing::instrument;
|
use tracing::instrument;
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
use super::setup::CURRENT_SECRET;
|
use super::setup::CURRENT_SECRET;
|
||||||
use crate::account::AccountInfo;
|
use crate::account::AccountInfo;
|
||||||
@@ -57,6 +58,7 @@ pub struct RpcContextSeed {
|
|||||||
pub client: Client,
|
pub client: Client,
|
||||||
pub hardware: Hardware,
|
pub hardware: Hardware,
|
||||||
pub start_time: Instant,
|
pub start_time: Instant,
|
||||||
|
#[cfg(feature = "dev")]
|
||||||
pub dev: Dev,
|
pub dev: Dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,6 +251,7 @@ impl RpcContext {
|
|||||||
.with_kind(crate::ErrorKind::ParseUrl)?,
|
.with_kind(crate::ErrorKind::ParseUrl)?,
|
||||||
hardware: Hardware { devices, ram },
|
hardware: Hardware { devices, ram },
|
||||||
start_time: Instant::now(),
|
start_time: Instant::now(),
|
||||||
|
#[cfg(feature = "dev")]
|
||||||
dev: Dev {
|
dev: Dev {
|
||||||
lxc: Mutex::new(BTreeMap::new()),
|
lxc: Mutex::new(BTreeMap::new()),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ impl std::fmt::Display for ApiState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn main_api<C: Context>() -> ParentHandler<C> {
|
pub fn main_api<C: Context>() -> ParentHandler<C> {
|
||||||
ParentHandler::new()
|
let api = ParentHandler::new()
|
||||||
.subcommand::<C, _>("git-info", from_fn(version::git_info))
|
.subcommand::<C, _>("git-info", from_fn(version::git_info))
|
||||||
.subcommand(
|
.subcommand(
|
||||||
"echo",
|
"echo",
|
||||||
@@ -146,9 +146,11 @@ pub fn main_api<C: Context>() -> ParentHandler<C> {
|
|||||||
)
|
)
|
||||||
.no_cli(),
|
.no_cli(),
|
||||||
)
|
)
|
||||||
.subcommand("lxc", lxc::lxc::<C>())
|
|
||||||
.subcommand("s9pk", s9pk::rpc::s9pk())
|
.subcommand("s9pk", s9pk::rpc::s9pk())
|
||||||
.subcommand("util", util::rpc::util::<C>())
|
.subcommand("util", util::rpc::util::<C>());
|
||||||
|
#[cfg(feature = "dev")]
|
||||||
|
let api = api.subcommand("lxc", lxc::dev::lxc::<C>());
|
||||||
|
api
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn server<C: Context>() -> ParentHandler<C> {
|
pub fn server<C: Context>() -> ParentHandler<C> {
|
||||||
|
|||||||
112
core/startos/src/lxc/dev.rs
Normal file
112
core/startos/src/lxc/dev.rs
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
use std::ops::Deref;
|
||||||
|
|
||||||
|
use clap::Parser;
|
||||||
|
use rpc_toolkit::{
|
||||||
|
from_fn_async, CallRemoteHandler, Context, Empty, HandlerArgs, HandlerExt, HandlerFor,
|
||||||
|
ParentHandler,
|
||||||
|
};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use ts_rs::TS;
|
||||||
|
|
||||||
|
use crate::context::{CliContext, RpcContext};
|
||||||
|
use crate::lxc::{ContainerId, LxcConfig};
|
||||||
|
use crate::prelude::*;
|
||||||
|
use crate::rpc_continuations::Guid;
|
||||||
|
|
||||||
|
pub fn lxc<C: Context>() -> ParentHandler<C> {
|
||||||
|
ParentHandler::new()
|
||||||
|
.subcommand(
|
||||||
|
"create",
|
||||||
|
from_fn_async(create).with_call_remote::<CliContext>(),
|
||||||
|
)
|
||||||
|
.subcommand(
|
||||||
|
"list",
|
||||||
|
from_fn_async(list)
|
||||||
|
.with_custom_display_fn(|_, res| {
|
||||||
|
use prettytable::*;
|
||||||
|
let mut table = table!([bc => "GUID"]);
|
||||||
|
for guid in res {
|
||||||
|
table.add_row(row![&*guid]);
|
||||||
|
}
|
||||||
|
table.printstd();
|
||||||
|
Ok(())
|
||||||
|
})
|
||||||
|
.with_call_remote::<CliContext>(),
|
||||||
|
)
|
||||||
|
.subcommand(
|
||||||
|
"remove",
|
||||||
|
from_fn_async(remove)
|
||||||
|
.no_display()
|
||||||
|
.with_call_remote::<CliContext>(),
|
||||||
|
)
|
||||||
|
.subcommand("connect", from_fn_async(connect_rpc).no_cli())
|
||||||
|
.subcommand("connect", from_fn_async(connect_rpc_cli).no_display())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn create(ctx: RpcContext) -> Result<ContainerId, Error> {
|
||||||
|
let container = ctx.lxc_manager.create(None, LxcConfig::default()).await?;
|
||||||
|
let guid = container.guid.deref().clone();
|
||||||
|
ctx.dev.lxc.lock().await.insert(guid.clone(), container);
|
||||||
|
Ok(guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn list(ctx: RpcContext) -> Result<Vec<ContainerId>, Error> {
|
||||||
|
Ok(ctx.dev.lxc.lock().await.keys().cloned().collect())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Serialize, Parser, TS)]
|
||||||
|
pub struct RemoveParams {
|
||||||
|
#[ts(type = "string")]
|
||||||
|
pub guid: ContainerId,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn remove(ctx: RpcContext, RemoveParams { guid }: RemoveParams) -> Result<(), Error> {
|
||||||
|
if let Some(container) = ctx.dev.lxc.lock().await.remove(&guid) {
|
||||||
|
container.exit().await?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Serialize, Parser, TS)]
|
||||||
|
pub struct ConnectParams {
|
||||||
|
#[ts(type = "string")]
|
||||||
|
pub guid: ContainerId,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn connect_rpc(
|
||||||
|
ctx: RpcContext,
|
||||||
|
ConnectParams { guid }: ConnectParams,
|
||||||
|
) -> Result<Guid, Error> {
|
||||||
|
super::connect(
|
||||||
|
&ctx,
|
||||||
|
ctx.dev.lxc.lock().await.get(&guid).ok_or_else(|| {
|
||||||
|
Error::new(eyre!("No container with guid: {guid}"), ErrorKind::NotFound)
|
||||||
|
})?,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn connect_rpc_cli(
|
||||||
|
HandlerArgs {
|
||||||
|
context,
|
||||||
|
parent_method,
|
||||||
|
method,
|
||||||
|
params,
|
||||||
|
inherited_params,
|
||||||
|
raw_params,
|
||||||
|
}: HandlerArgs<CliContext, ConnectParams>,
|
||||||
|
) -> Result<(), Error> {
|
||||||
|
let ctx = context.clone();
|
||||||
|
let guid = CallRemoteHandler::<CliContext, _, _>::new(from_fn_async(connect_rpc))
|
||||||
|
.handle_async(HandlerArgs {
|
||||||
|
context,
|
||||||
|
parent_method,
|
||||||
|
method,
|
||||||
|
params: rpc_toolkit::util::Flat(params, Empty {}),
|
||||||
|
inherited_params,
|
||||||
|
raw_params,
|
||||||
|
})
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
super::connect_cli(&ctx, guid).await
|
||||||
|
}
|
||||||
@@ -1,20 +1,15 @@
|
|||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
use std::net::Ipv4Addr;
|
use std::net::Ipv4Addr;
|
||||||
use std::ops::Deref;
|
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::sync::{Arc, Weak};
|
use std::sync::{Arc, Weak};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use clap::builder::ValueParserFactory;
|
use clap::builder::ValueParserFactory;
|
||||||
use clap::Parser;
|
|
||||||
use futures::{AsyncWriteExt, StreamExt};
|
use futures::{AsyncWriteExt, StreamExt};
|
||||||
use imbl_value::{InOMap, InternedString};
|
use imbl_value::{InOMap, InternedString};
|
||||||
use models::InvalidId;
|
use models::InvalidId;
|
||||||
use rpc_toolkit::yajrc::{RpcError, RpcResponse};
|
use rpc_toolkit::yajrc::RpcError;
|
||||||
use rpc_toolkit::{
|
use rpc_toolkit::{GenericRpcMethod, RpcRequest, RpcResponse};
|
||||||
from_fn_async, CallRemoteHandler, Context, Empty, GenericRpcMethod, HandlerArgs, HandlerExt,
|
|
||||||
HandlerFor, ParentHandler, RpcRequest,
|
|
||||||
};
|
|
||||||
use rustyline_async::{ReadlineEvent, SharedWriter};
|
use rustyline_async::{ReadlineEvent, SharedWriter};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use tokio::fs::File;
|
use tokio::fs::File;
|
||||||
@@ -38,6 +33,9 @@ use crate::util::clap::FromStrParser;
|
|||||||
use crate::util::rpc_client::UnixRpcClient;
|
use crate::util::rpc_client::UnixRpcClient;
|
||||||
use crate::util::{new_guid, Invoke};
|
use crate::util::{new_guid, Invoke};
|
||||||
|
|
||||||
|
#[cfg(feature = "dev")]
|
||||||
|
pub mod dev;
|
||||||
|
|
||||||
const LXC_CONTAINER_DIR: &str = "/var/lib/lxc";
|
const LXC_CONTAINER_DIR: &str = "/var/lib/lxc";
|
||||||
const RPC_DIR: &str = "media/startos/rpc"; // must not be absolute path
|
const RPC_DIR: &str = "media/startos/rpc"; // must not be absolute path
|
||||||
pub const CONTAINER_RPC_SERVER_SOCKET: &str = "service.sock"; // must not be absolute path
|
pub const CONTAINER_RPC_SERVER_SOCKET: &str = "service.sock"; // must not be absolute path
|
||||||
@@ -373,80 +371,6 @@ impl Drop for LxcContainer {
|
|||||||
|
|
||||||
#[derive(Default, Serialize)]
|
#[derive(Default, Serialize)]
|
||||||
pub struct LxcConfig {}
|
pub struct LxcConfig {}
|
||||||
|
|
||||||
pub fn lxc<C: Context>() -> ParentHandler<C> {
|
|
||||||
ParentHandler::new()
|
|
||||||
.subcommand(
|
|
||||||
"create",
|
|
||||||
from_fn_async(create).with_call_remote::<CliContext>(),
|
|
||||||
)
|
|
||||||
.subcommand(
|
|
||||||
"list",
|
|
||||||
from_fn_async(list)
|
|
||||||
.with_custom_display_fn(|_, res| {
|
|
||||||
use prettytable::*;
|
|
||||||
let mut table = table!([bc => "GUID"]);
|
|
||||||
for guid in res {
|
|
||||||
table.add_row(row![&*guid]);
|
|
||||||
}
|
|
||||||
table.printstd();
|
|
||||||
Ok(())
|
|
||||||
})
|
|
||||||
.with_call_remote::<CliContext>(),
|
|
||||||
)
|
|
||||||
.subcommand(
|
|
||||||
"remove",
|
|
||||||
from_fn_async(remove)
|
|
||||||
.no_display()
|
|
||||||
.with_call_remote::<CliContext>(),
|
|
||||||
)
|
|
||||||
.subcommand("connect", from_fn_async(connect_rpc).no_cli())
|
|
||||||
.subcommand("connect", from_fn_async(connect_rpc_cli).no_display())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn create(ctx: RpcContext) -> Result<ContainerId, Error> {
|
|
||||||
let container = ctx.lxc_manager.create(None, LxcConfig::default()).await?;
|
|
||||||
let guid = container.guid.deref().clone();
|
|
||||||
ctx.dev.lxc.lock().await.insert(guid.clone(), container);
|
|
||||||
Ok(guid)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn list(ctx: RpcContext) -> Result<Vec<ContainerId>, Error> {
|
|
||||||
Ok(ctx.dev.lxc.lock().await.keys().cloned().collect())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize, Parser, TS)]
|
|
||||||
pub struct RemoveParams {
|
|
||||||
#[ts(type = "string")]
|
|
||||||
pub guid: ContainerId,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn remove(ctx: RpcContext, RemoveParams { guid }: RemoveParams) -> Result<(), Error> {
|
|
||||||
if let Some(container) = ctx.dev.lxc.lock().await.remove(&guid) {
|
|
||||||
container.exit().await?;
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize, Parser, TS)]
|
|
||||||
pub struct ConnectParams {
|
|
||||||
#[ts(type = "string")]
|
|
||||||
pub guid: ContainerId,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn connect_rpc(
|
|
||||||
ctx: RpcContext,
|
|
||||||
ConnectParams { guid }: ConnectParams,
|
|
||||||
) -> Result<Guid, Error> {
|
|
||||||
connect(
|
|
||||||
&ctx,
|
|
||||||
ctx.dev.lxc.lock().await.get(&guid).ok_or_else(|| {
|
|
||||||
Error::new(eyre!("No container with guid: {guid}"), ErrorKind::NotFound)
|
|
||||||
})?,
|
|
||||||
)
|
|
||||||
.await
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn connect(ctx: &RpcContext, container: &LxcContainer) -> Result<Guid, Error> {
|
pub async fn connect(ctx: &RpcContext, container: &LxcContainer) -> Result<Guid, Error> {
|
||||||
use axum::extract::ws::Message;
|
use axum::extract::ws::Message;
|
||||||
|
|
||||||
@@ -476,11 +400,8 @@ pub async fn connect(ctx: &RpcContext, container: &LxcContainer) -> Result<Guid,
|
|||||||
}
|
}
|
||||||
.await;
|
.await;
|
||||||
ws.send(Message::Text(
|
ws.send(Message::Text(
|
||||||
serde_json::to_string(&RpcResponse::<GenericRpcMethod> {
|
serde_json::to_string(&RpcResponse { id, result })
|
||||||
id,
|
.with_kind(ErrorKind::Serialization)?,
|
||||||
result,
|
|
||||||
})
|
|
||||||
.with_kind(ErrorKind::Serialization)?,
|
|
||||||
))
|
))
|
||||||
.await
|
.await
|
||||||
.with_kind(ErrorKind::Network)?;
|
.with_kind(ErrorKind::Network)?;
|
||||||
@@ -614,28 +535,3 @@ pub async fn connect_cli(ctx: &CliContext, guid: Guid) -> Result<(), Error> {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn connect_rpc_cli(
|
|
||||||
HandlerArgs {
|
|
||||||
context,
|
|
||||||
parent_method,
|
|
||||||
method,
|
|
||||||
params,
|
|
||||||
inherited_params,
|
|
||||||
raw_params,
|
|
||||||
}: HandlerArgs<CliContext, ConnectParams>,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
let ctx = context.clone();
|
|
||||||
let guid = CallRemoteHandler::<CliContext, _, _>::new(from_fn_async(connect_rpc))
|
|
||||||
.handle_async(HandlerArgs {
|
|
||||||
context,
|
|
||||||
parent_method,
|
|
||||||
method,
|
|
||||||
params: rpc_toolkit::util::Flat(params, Empty {}),
|
|
||||||
inherited_params,
|
|
||||||
raw_params,
|
|
||||||
})
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
connect_cli(&ctx, guid).await
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ use reqwest::{Client, Proxy};
|
|||||||
use rpc_toolkit::yajrc::RpcError;
|
use rpc_toolkit::yajrc::RpcError;
|
||||||
use rpc_toolkit::{CallRemote, Context, Empty};
|
use rpc_toolkit::{CallRemote, Context, Empty};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use sqlx::PgPool;
|
||||||
use tokio::sync::broadcast::Sender;
|
use tokio::sync::broadcast::Sender;
|
||||||
use tracing::instrument;
|
use tracing::instrument;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
@@ -32,17 +33,22 @@ pub struct RegistryConfig {
|
|||||||
#[arg(short = 'l', long = "listen")]
|
#[arg(short = 'l', long = "listen")]
|
||||||
pub listen: Option<SocketAddr>,
|
pub listen: Option<SocketAddr>,
|
||||||
#[arg(short = 'h', long = "hostname")]
|
#[arg(short = 'h', long = "hostname")]
|
||||||
pub hostname: InternedString,
|
pub hostname: Option<InternedString>,
|
||||||
#[arg(short = 'p', long = "proxy")]
|
#[arg(short = 'p', long = "tor-proxy")]
|
||||||
pub tor_proxy: Option<Url>,
|
pub tor_proxy: Option<Url>,
|
||||||
#[arg(short = 'd', long = "datadir")]
|
#[arg(short = 'd', long = "datadir")]
|
||||||
pub datadir: Option<PathBuf>,
|
pub datadir: Option<PathBuf>,
|
||||||
|
#[arg(short = 'u', long = "pg-connection-url")]
|
||||||
|
pub pg_connection_url: Option<String>,
|
||||||
}
|
}
|
||||||
impl ContextConfig for RegistryConfig {
|
impl ContextConfig for RegistryConfig {
|
||||||
fn next(&mut self) -> Option<PathBuf> {
|
fn next(&mut self) -> Option<PathBuf> {
|
||||||
self.config.take()
|
self.config.take()
|
||||||
}
|
}
|
||||||
fn merge_with(&mut self, other: Self) {
|
fn merge_with(&mut self, other: Self) {
|
||||||
|
self.listen = self.listen.take().or(other.listen);
|
||||||
|
self.hostname = self.hostname.take().or(other.hostname);
|
||||||
|
self.tor_proxy = self.tor_proxy.take().or(other.tor_proxy);
|
||||||
self.datadir = self.datadir.take().or(other.datadir);
|
self.datadir = self.datadir.take().or(other.datadir);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -64,6 +70,7 @@ pub struct RegistryContextSeed {
|
|||||||
pub rpc_continuations: RpcContinuations,
|
pub rpc_continuations: RpcContinuations,
|
||||||
pub client: Client,
|
pub client: Client,
|
||||||
pub shutdown: Sender<()>,
|
pub shutdown: Sender<()>,
|
||||||
|
pub pool: Option<PgPool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
@@ -91,8 +98,24 @@ impl RegistryContext {
|
|||||||
.clone()
|
.clone()
|
||||||
.map(Ok)
|
.map(Ok)
|
||||||
.unwrap_or_else(|| "socks5h://localhost:9050".parse())?;
|
.unwrap_or_else(|| "socks5h://localhost:9050".parse())?;
|
||||||
|
let pool: Option<PgPool> = match &config.pg_connection_url {
|
||||||
|
Some(url) => match PgPool::connect(url.as_str()).await {
|
||||||
|
Ok(pool) => Some(pool),
|
||||||
|
Err(_) => None,
|
||||||
|
},
|
||||||
|
None => None,
|
||||||
|
};
|
||||||
Ok(Self(Arc::new(RegistryContextSeed {
|
Ok(Self(Arc::new(RegistryContextSeed {
|
||||||
hostname: config.hostname.clone(),
|
hostname: config
|
||||||
|
.hostname
|
||||||
|
.as_ref()
|
||||||
|
.ok_or_else(|| {
|
||||||
|
Error::new(
|
||||||
|
eyre!("missing required configuration: hostname"),
|
||||||
|
ErrorKind::NotFound,
|
||||||
|
)
|
||||||
|
})?
|
||||||
|
.clone(),
|
||||||
listen: config
|
listen: config
|
||||||
.listen
|
.listen
|
||||||
.unwrap_or(SocketAddr::new(Ipv4Addr::LOCALHOST.into(), 5959)),
|
.unwrap_or(SocketAddr::new(Ipv4Addr::LOCALHOST.into(), 5959)),
|
||||||
@@ -110,6 +133,7 @@ impl RegistryContext {
|
|||||||
.build()
|
.build()
|
||||||
.with_kind(crate::ErrorKind::ParseUrl)?,
|
.with_kind(crate::ErrorKind::ParseUrl)?,
|
||||||
shutdown,
|
shutdown,
|
||||||
|
pool,
|
||||||
})))
|
})))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
25
core/startos/src/registry/metrics-db/registry-sqlx-data.sh
Executable file
25
core/startos/src/registry/metrics-db/registry-sqlx-data.sh
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||||
|
TMP_DIR=$(mktemp -d)
|
||||||
|
mkdir $TMP_DIR/pgdata
|
||||||
|
docker run -d --rm --name=tmp_postgres -e POSTGRES_PASSWORD=password -v $TMP_DIR/pgdata:/var/lib/postgresql/data postgres
|
||||||
|
|
||||||
|
(
|
||||||
|
set -e
|
||||||
|
ctr=0
|
||||||
|
until docker exec tmp_postgres psql -U postgres 2> /dev/null || [ $ctr -ge 5 ]; do
|
||||||
|
ctr=$[ctr + 1]
|
||||||
|
sleep 5;
|
||||||
|
done
|
||||||
|
|
||||||
|
PG_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' tmp_postgres)
|
||||||
|
|
||||||
|
cat "./registry_schema.sql" | docker exec -i tmp_postgres psql -U postgres -d postgres -f-
|
||||||
|
cd ../../..
|
||||||
|
DATABASE_URL=postgres://postgres:password@$PG_IP/postgres PLATFORM=$(uname -m) cargo sqlx prepare -- --lib --profile=test --workspace
|
||||||
|
echo "Subscript Complete"
|
||||||
|
)
|
||||||
|
|
||||||
|
docker stop tmp_postgres
|
||||||
|
sudo rm -rf $TMP_DIR
|
||||||
828
core/startos/src/registry/metrics-db/registry_schema.sql
Normal file
828
core/startos/src/registry/metrics-db/registry_schema.sql
Normal file
@@ -0,0 +1,828 @@
|
|||||||
|
--
|
||||||
|
-- PostgreSQL database dump
|
||||||
|
--
|
||||||
|
|
||||||
|
-- Dumped from database version 14.12 (Ubuntu 14.12-0ubuntu0.22.04.1)
|
||||||
|
-- Dumped by pg_dump version 14.12 (Ubuntu 14.12-0ubuntu0.22.04.1)
|
||||||
|
|
||||||
|
SET statement_timeout = 0;
|
||||||
|
SET lock_timeout = 0;
|
||||||
|
SET idle_in_transaction_session_timeout = 0;
|
||||||
|
SET client_encoding = 'UTF8';
|
||||||
|
SET standard_conforming_strings = on;
|
||||||
|
SELECT pg_catalog.set_config('search_path', '', false);
|
||||||
|
SET check_function_bodies = false;
|
||||||
|
SET xmloption = content;
|
||||||
|
SET client_min_messages = warning;
|
||||||
|
SET row_security = off;
|
||||||
|
|
||||||
|
SET default_tablespace = '';
|
||||||
|
|
||||||
|
SET default_table_access_method = heap;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: admin; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.admin (
|
||||||
|
id character varying NOT NULL,
|
||||||
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
pass_hash character varying NOT NULL,
|
||||||
|
deleted_at timestamp with time zone
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.admin OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: admin_pkgs; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.admin_pkgs (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
admin character varying NOT NULL,
|
||||||
|
pkg_id character varying NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.admin_pkgs OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: admin_pkgs_id_seq; Type: SEQUENCE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE SEQUENCE public.admin_pkgs_id_seq
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.admin_pkgs_id_seq OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: admin_pkgs_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER SEQUENCE public.admin_pkgs_id_seq OWNED BY public.admin_pkgs.id;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: category; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.category (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
name character varying NOT NULL,
|
||||||
|
description character varying NOT NULL,
|
||||||
|
priority bigint DEFAULT 0 NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.category OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: category_id_seq; Type: SEQUENCE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE SEQUENCE public.category_id_seq
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.category_id_seq OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: category_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER SEQUENCE public.category_id_seq OWNED BY public.category.id;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: eos_hash; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.eos_hash (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
version character varying NOT NULL,
|
||||||
|
hash character varying NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.eos_hash OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: eos_hash_id_seq; Type: SEQUENCE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE SEQUENCE public.eos_hash_id_seq
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.eos_hash_id_seq OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: eos_hash_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER SEQUENCE public.eos_hash_id_seq OWNED BY public.eos_hash.id;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: error_log_record; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.error_log_record (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
epoch character varying NOT NULL,
|
||||||
|
commit_hash character varying NOT NULL,
|
||||||
|
source_file character varying NOT NULL,
|
||||||
|
line bigint NOT NULL,
|
||||||
|
target character varying NOT NULL,
|
||||||
|
level character varying NOT NULL,
|
||||||
|
message character varying NOT NULL,
|
||||||
|
incidents bigint NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.error_log_record OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: error_log_record_id_seq; Type: SEQUENCE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE SEQUENCE public.error_log_record_id_seq
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.error_log_record_id_seq OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: error_log_record_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER SEQUENCE public.error_log_record_id_seq OWNED BY public.error_log_record.id;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: metric; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.metric (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
version character varying NOT NULL,
|
||||||
|
pkg_id character varying NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.metric OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: metric_id_seq; Type: SEQUENCE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE SEQUENCE public.metric_id_seq
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.metric_id_seq OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: metric_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER SEQUENCE public.metric_id_seq OWNED BY public.metric.id;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: os_version; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.os_version (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
updated_at timestamp with time zone NOT NULL,
|
||||||
|
number character varying NOT NULL,
|
||||||
|
headline character varying NOT NULL,
|
||||||
|
release_notes character varying NOT NULL,
|
||||||
|
arch character varying
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.os_version OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: os_version_id_seq; Type: SEQUENCE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE SEQUENCE public.os_version_id_seq
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.os_version_id_seq OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: os_version_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER SEQUENCE public.os_version_id_seq OWNED BY public.os_version.id;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: persistent_migration; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.persistent_migration (
|
||||||
|
id integer NOT NULL,
|
||||||
|
version integer NOT NULL,
|
||||||
|
label character varying,
|
||||||
|
"timestamp" timestamp with time zone NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.persistent_migration OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: persistent_migration_id_seq; Type: SEQUENCE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE SEQUENCE public.persistent_migration_id_seq
|
||||||
|
AS integer
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.persistent_migration_id_seq OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: persistent_migration_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER SEQUENCE public.persistent_migration_id_seq OWNED BY public.persistent_migration.id;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_category; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.pkg_category (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
category_id bigint NOT NULL,
|
||||||
|
pkg_id character varying NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.pkg_category OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_dependency; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.pkg_dependency (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
pkg_id character varying NOT NULL,
|
||||||
|
pkg_version character varying NOT NULL,
|
||||||
|
dep_id character varying NOT NULL,
|
||||||
|
dep_version_range character varying NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.pkg_dependency OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_dependency_id_seq; Type: SEQUENCE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE SEQUENCE public.pkg_dependency_id_seq
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.pkg_dependency_id_seq OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_dependency_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER SEQUENCE public.pkg_dependency_id_seq OWNED BY public.pkg_dependency.id;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_record; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.pkg_record (
|
||||||
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
updated_at timestamp with time zone,
|
||||||
|
pkg_id character varying NOT NULL,
|
||||||
|
hidden boolean DEFAULT false NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.pkg_record OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: service_category_id_seq; Type: SEQUENCE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE SEQUENCE public.service_category_id_seq
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.service_category_id_seq OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: service_category_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER SEQUENCE public.service_category_id_seq OWNED BY public.pkg_category.id;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: upload; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.upload (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
uploader character varying NOT NULL,
|
||||||
|
pkg_id character varying NOT NULL,
|
||||||
|
pkg_version character varying NOT NULL,
|
||||||
|
created_at timestamp with time zone NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.upload OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: upload_id_seq; Type: SEQUENCE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE SEQUENCE public.upload_id_seq
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.upload_id_seq OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: upload_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER SEQUENCE public.upload_id_seq OWNED BY public.upload.id;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: user_activity; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.user_activity (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
server_id character varying NOT NULL,
|
||||||
|
os_version character varying,
|
||||||
|
arch character varying
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.user_activity OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: user_activity_id_seq; Type: SEQUENCE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE SEQUENCE public.user_activity_id_seq
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.user_activity_id_seq OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: user_activity_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER SEQUENCE public.user_activity_id_seq OWNED BY public.user_activity.id;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: version; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.version (
|
||||||
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
updated_at timestamp with time zone,
|
||||||
|
number character varying NOT NULL,
|
||||||
|
release_notes character varying NOT NULL,
|
||||||
|
os_version character varying NOT NULL,
|
||||||
|
pkg_id character varying NOT NULL,
|
||||||
|
title character varying NOT NULL,
|
||||||
|
desc_short character varying NOT NULL,
|
||||||
|
desc_long character varying NOT NULL,
|
||||||
|
icon_type character varying NOT NULL,
|
||||||
|
deprecated_at timestamp with time zone
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.version OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: version_platform; Type: TABLE; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.version_platform (
|
||||||
|
created_at timestamp with time zone NOT NULL,
|
||||||
|
updated_at timestamp with time zone,
|
||||||
|
pkg_id character varying NOT NULL,
|
||||||
|
version_number character varying NOT NULL,
|
||||||
|
arch character varying NOT NULL,
|
||||||
|
ram bigint,
|
||||||
|
device jsonb
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.version_platform OWNER TO alpha_admin;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: admin_pkgs id; Type: DEFAULT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.admin_pkgs ALTER COLUMN id SET DEFAULT nextval('public.admin_pkgs_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: category id; Type: DEFAULT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.category ALTER COLUMN id SET DEFAULT nextval('public.category_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: eos_hash id; Type: DEFAULT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.eos_hash ALTER COLUMN id SET DEFAULT nextval('public.eos_hash_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: error_log_record id; Type: DEFAULT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.error_log_record ALTER COLUMN id SET DEFAULT nextval('public.error_log_record_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: metric id; Type: DEFAULT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.metric ALTER COLUMN id SET DEFAULT nextval('public.metric_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: os_version id; Type: DEFAULT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.os_version ALTER COLUMN id SET DEFAULT nextval('public.os_version_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: persistent_migration id; Type: DEFAULT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.persistent_migration ALTER COLUMN id SET DEFAULT nextval('public.persistent_migration_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_category id; Type: DEFAULT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.pkg_category ALTER COLUMN id SET DEFAULT nextval('public.service_category_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_dependency id; Type: DEFAULT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.pkg_dependency ALTER COLUMN id SET DEFAULT nextval('public.pkg_dependency_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: upload id; Type: DEFAULT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.upload ALTER COLUMN id SET DEFAULT nextval('public.upload_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: user_activity id; Type: DEFAULT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.user_activity ALTER COLUMN id SET DEFAULT nextval('public.user_activity_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: admin admin_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.admin
|
||||||
|
ADD CONSTRAINT admin_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: admin_pkgs admin_pkgs_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.admin_pkgs
|
||||||
|
ADD CONSTRAINT admin_pkgs_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: category category_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.category
|
||||||
|
ADD CONSTRAINT category_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: eos_hash eos_hash_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.eos_hash
|
||||||
|
ADD CONSTRAINT eos_hash_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: error_log_record error_log_record_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.error_log_record
|
||||||
|
ADD CONSTRAINT error_log_record_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: metric metric_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.metric
|
||||||
|
ADD CONSTRAINT metric_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: os_version os_version_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.os_version
|
||||||
|
ADD CONSTRAINT os_version_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: persistent_migration persistent_migration_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.persistent_migration
|
||||||
|
ADD CONSTRAINT persistent_migration_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_category pkg_category_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.pkg_category
|
||||||
|
ADD CONSTRAINT pkg_category_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_dependency pkg_dependency_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.pkg_dependency
|
||||||
|
ADD CONSTRAINT pkg_dependency_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: admin_pkgs unique_admin_pkg; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.admin_pkgs
|
||||||
|
ADD CONSTRAINT unique_admin_pkg UNIQUE (pkg_id, admin);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: error_log_record unique_log_record; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.error_log_record
|
||||||
|
ADD CONSTRAINT unique_log_record UNIQUE (epoch, commit_hash, source_file, line, target, level, message);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: category unique_name; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.category
|
||||||
|
ADD CONSTRAINT unique_name UNIQUE (name);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_category unique_pkg_category; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.pkg_category
|
||||||
|
ADD CONSTRAINT unique_pkg_category UNIQUE (pkg_id, category_id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_dependency unique_pkg_dep_version; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.pkg_dependency
|
||||||
|
ADD CONSTRAINT unique_pkg_dep_version UNIQUE (pkg_id, pkg_version, dep_id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: eos_hash unique_version; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.eos_hash
|
||||||
|
ADD CONSTRAINT unique_version UNIQUE (version);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: upload upload_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.upload
|
||||||
|
ADD CONSTRAINT upload_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: user_activity user_activity_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.user_activity
|
||||||
|
ADD CONSTRAINT user_activity_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: version version_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.version
|
||||||
|
ADD CONSTRAINT version_pkey PRIMARY KEY (pkg_id, number);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: version_platform version_platform_pkey; Type: CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.version_platform
|
||||||
|
ADD CONSTRAINT version_platform_pkey PRIMARY KEY (pkg_id, version_number, arch);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: category_name_idx; Type: INDEX; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX category_name_idx ON public.category USING btree (name);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_record_pkg_id_idx; Type: INDEX; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX pkg_record_pkg_id_idx ON public.pkg_record USING btree (pkg_id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: version_number_idx; Type: INDEX; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE INDEX version_number_idx ON public.version USING btree (number);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: admin_pkgs admin_pkgs_admin_fkey; Type: FK CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.admin_pkgs
|
||||||
|
ADD CONSTRAINT admin_pkgs_admin_fkey FOREIGN KEY (admin) REFERENCES public.admin(id) ON UPDATE RESTRICT ON DELETE RESTRICT;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: metric metric_pkg_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.metric
|
||||||
|
ADD CONSTRAINT metric_pkg_id_fkey FOREIGN KEY (pkg_id) REFERENCES public.pkg_record(pkg_id) ON UPDATE RESTRICT ON DELETE RESTRICT;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_category pkg_category_category_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.pkg_category
|
||||||
|
ADD CONSTRAINT pkg_category_category_id_fkey FOREIGN KEY (category_id) REFERENCES public.category(id) ON UPDATE RESTRICT ON DELETE RESTRICT;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_category pkg_category_pkg_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.pkg_category
|
||||||
|
ADD CONSTRAINT pkg_category_pkg_id_fkey FOREIGN KEY (pkg_id) REFERENCES public.pkg_record(pkg_id) ON UPDATE RESTRICT ON DELETE RESTRICT;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_dependency pkg_dependency_dep_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.pkg_dependency
|
||||||
|
ADD CONSTRAINT pkg_dependency_dep_id_fkey FOREIGN KEY (dep_id) REFERENCES public.pkg_record(pkg_id) ON UPDATE RESTRICT ON DELETE RESTRICT;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: pkg_dependency pkg_dependency_pkg_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.pkg_dependency
|
||||||
|
ADD CONSTRAINT pkg_dependency_pkg_id_fkey FOREIGN KEY (pkg_id) REFERENCES public.pkg_record(pkg_id) ON UPDATE RESTRICT ON DELETE RESTRICT;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: upload upload_pkg_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.upload
|
||||||
|
ADD CONSTRAINT upload_pkg_id_fkey FOREIGN KEY (pkg_id) REFERENCES public.pkg_record(pkg_id) ON UPDATE RESTRICT ON DELETE RESTRICT;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: upload upload_uploader_fkey; Type: FK CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.upload
|
||||||
|
ADD CONSTRAINT upload_uploader_fkey FOREIGN KEY (uploader) REFERENCES public.admin(id) ON UPDATE RESTRICT ON DELETE RESTRICT;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: version version_pkg_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.version
|
||||||
|
ADD CONSTRAINT version_pkg_id_fkey FOREIGN KEY (pkg_id) REFERENCES public.pkg_record(pkg_id) ON UPDATE RESTRICT ON DELETE RESTRICT;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: version_platform version_platform_pkg_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: alpha_admin
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.version_platform
|
||||||
|
ADD CONSTRAINT version_platform_pkg_id_fkey FOREIGN KEY (pkg_id) REFERENCES public.pkg_record(pkg_id) ON UPDATE RESTRICT ON DELETE RESTRICT;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- PostgreSQL database dump complete
|
||||||
|
--
|
||||||
|
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
|
use chrono::Utc;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use emver::VersionRange;
|
use emver::VersionRange;
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use rpc_toolkit::{from_fn_async, Context, HandlerExt, ParentHandler};
|
use rpc_toolkit::{from_fn_async, Context, HandlerExt, ParentHandler};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use sqlx::query;
|
||||||
use ts_rs::TS;
|
use ts_rs::TS;
|
||||||
|
|
||||||
use crate::context::CliContext;
|
use crate::context::CliContext;
|
||||||
@@ -126,12 +128,34 @@ pub struct GetVersionParams {
|
|||||||
#[ts(type = "string | null")]
|
#[ts(type = "string | null")]
|
||||||
#[arg(long = "target")]
|
#[arg(long = "target")]
|
||||||
pub target: Option<VersionRange>,
|
pub target: Option<VersionRange>,
|
||||||
|
#[ts(type = "string | null")]
|
||||||
|
#[arg(long = "id")]
|
||||||
|
server_id: Option<String>,
|
||||||
|
#[ts(type = "string | null")]
|
||||||
|
#[arg(long = "arch")]
|
||||||
|
arch: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_version(
|
pub async fn get_version(
|
||||||
ctx: RegistryContext,
|
ctx: RegistryContext,
|
||||||
GetVersionParams { source, target }: GetVersionParams,
|
GetVersionParams {
|
||||||
|
source,
|
||||||
|
target,
|
||||||
|
server_id,
|
||||||
|
arch,
|
||||||
|
}: GetVersionParams,
|
||||||
) -> Result<BTreeMap<VersionString, OsVersionInfo>, Error> {
|
) -> Result<BTreeMap<VersionString, OsVersionInfo>, Error> {
|
||||||
|
if let (Some(pool), Some(server_id), Some(arch)) = (&ctx.pool, server_id, arch) {
|
||||||
|
let created_at = Utc::now();
|
||||||
|
|
||||||
|
query!("INSERT INTO user_activity (created_at, server_id, arch) VALUES ($1, $2, $3)",
|
||||||
|
created_at,
|
||||||
|
server_id,
|
||||||
|
arch
|
||||||
|
)
|
||||||
|
.execute(pool)
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
let target = target.unwrap_or(VersionRange::Any);
|
let target = target.unwrap_or(VersionRange::Any);
|
||||||
ctx.db
|
ctx.db
|
||||||
.peek()
|
.peek()
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||||
|
|
||||||
export type GetVersionParams = { source: string | null; target: string | null }
|
export type GetVersionParams = {
|
||||||
|
source: string | null
|
||||||
|
target: string | null
|
||||||
|
serverId: string | null
|
||||||
|
arch: string | null
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user