refactor: fix followgraph / add indexes
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
6eef8c7fef
commit
ba3e901e9b
@ -2,13 +2,13 @@ import "./index.css";
|
|||||||
import "@szhsin/react-menu/dist/index.css";
|
import "@szhsin/react-menu/dist/index.css";
|
||||||
import "@/assets/fonts/inter.css";
|
import "@/assets/fonts/inter.css";
|
||||||
|
|
||||||
import { encodeTLVEntries } from "@snort/system";
|
import { encodeTLVEntries, socialGraphInstance } from "@snort/system";
|
||||||
import { SnortContext } from "@snort/system-react";
|
import { SnortContext } from "@snort/system-react";
|
||||||
import { StrictMode } from "react";
|
import { StrictMode } from "react";
|
||||||
import * as ReactDOM from "react-dom/client";
|
import * as ReactDOM from "react-dom/client";
|
||||||
import { createBrowserRouter, RouteObject, RouterProvider } from "react-router-dom";
|
import { createBrowserRouter, RouteObject, RouterProvider } from "react-router-dom";
|
||||||
|
|
||||||
import { initRelayWorker, preload } from "@/Cache";
|
import { initRelayWorker, preload, Relay } from "@/Cache";
|
||||||
import { ThreadRoute } from "@/Components/Event/Thread";
|
import { ThreadRoute } from "@/Components/Event/Thread";
|
||||||
import { IntlProvider } from "@/Components/IntlProvider/IntlProvider";
|
import { IntlProvider } from "@/Components/IntlProvider/IntlProvider";
|
||||||
import { db } from "@/Db";
|
import { db } from "@/Db";
|
||||||
@ -69,6 +69,11 @@ async function initSite() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setupWebLNWalletConfig(Wallets);
|
setupWebLNWalletConfig(Wallets);
|
||||||
|
Relay.sql("select json from events where kind = ?", [3]).then(res => {
|
||||||
|
for (const [json] of res) {
|
||||||
|
socialGraphInstance.handleEvent(JSON.parse(json as string));
|
||||||
|
}
|
||||||
|
});
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,9 +153,6 @@
|
|||||||
"2ukA4d": {
|
"2ukA4d": {
|
||||||
"defaultMessage": "{n} hours"
|
"defaultMessage": "{n} hours"
|
||||||
},
|
},
|
||||||
"2zJXeA": {
|
|
||||||
"defaultMessage": "Profiles"
|
|
||||||
},
|
|
||||||
"39AHJm": {
|
"39AHJm": {
|
||||||
"defaultMessage": "Sign Up"
|
"defaultMessage": "Sign Up"
|
||||||
},
|
},
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { removeUndefined, throwIfOffline } from "@snort/shared";
|
import { removeUndefined, throwIfOffline } from "@snort/shared";
|
||||||
import { mapEventToProfile, NostrEvent, NostrSystem, ProfileLoaderService } from "@snort/system";
|
import { mapEventToProfile, NostrEvent, NostrSystem, ProfileLoaderService, socialGraphInstance } from "@snort/system";
|
||||||
|
|
||||||
import { EventsCache, Relay, RelayMetrics, SystemDb, UserCache, UserRelays } from "@/Cache";
|
import { EventsCache, Relay, RelayMetrics, SystemDb, UserCache, UserRelays } from "@/Cache";
|
||||||
import { LoginStore } from "@/Utils/Login";
|
import { LoginStore } from "@/Utils/Login";
|
||||||
@ -29,6 +29,7 @@ System.on("event", (_, ev) => {
|
|||||||
Relay.event(ev);
|
Relay.event(ev);
|
||||||
EventsCache.discover(ev);
|
EventsCache.discover(ev);
|
||||||
UserCache.discover(ev);
|
UserCache.discover(ev);
|
||||||
|
socialGraphInstance.handleEvent(ev);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -50,7 +50,6 @@
|
|||||||
"2mcwT8": "New Note",
|
"2mcwT8": "New Note",
|
||||||
"2oCF7O": "Followed by friends of friends",
|
"2oCF7O": "Followed by friends of friends",
|
||||||
"2ukA4d": "{n} hours",
|
"2ukA4d": "{n} hours",
|
||||||
"2zJXeA": "Profiles",
|
|
||||||
"39AHJm": "Sign Up",
|
"39AHJm": "Sign Up",
|
||||||
"3KNMbJ": "Articles",
|
"3KNMbJ": "Articles",
|
||||||
"3QwfJR": "~{amount}",
|
"3QwfJR": "~{amount}",
|
||||||
|
@ -60,7 +60,7 @@ export class WorkerRelayInterface {
|
|||||||
return (await this.#workerRpc<object, Array<Array<any>>>("sql", { sql, params })).result;
|
return (await this.#workerRpc<object, Array<Array<any>>>("sql", { sql, params })).result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#workerRpc<T, R>(cmd: string, args?: T, timeout = 30_000) {
|
#workerRpc<T, R>(cmd: string, args?: T) {
|
||||||
const id = uuid();
|
const id = uuid();
|
||||||
const msg = {
|
const msg = {
|
||||||
id,
|
id,
|
||||||
@ -71,20 +71,14 @@ export class WorkerRelayInterface {
|
|||||||
return new Promise<{
|
return new Promise<{
|
||||||
result: R;
|
result: R;
|
||||||
port: MessagePort | undefined;
|
port: MessagePort | undefined;
|
||||||
}>((resolve, reject) => {
|
}>(resolve => {
|
||||||
let t: ReturnType<typeof setTimeout>;
|
|
||||||
this.#commandQueue.set(id, (v, port) => {
|
this.#commandQueue.set(id, (v, port) => {
|
||||||
clearTimeout(t);
|
|
||||||
const cmdReply = v as WorkerMessage<R>;
|
const cmdReply = v as WorkerMessage<R>;
|
||||||
resolve({
|
resolve({
|
||||||
result: cmdReply.args,
|
result: cmdReply.args,
|
||||||
port: port.length > 0 ? port[0] : undefined,
|
port: port.length > 0 ? port[0] : undefined,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
t = setTimeout(() => {
|
|
||||||
reject("timeout");
|
|
||||||
this.#commandQueue.delete(id);
|
|
||||||
}, timeout);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,21 +66,22 @@ export class WorkerRelay extends EventEmitter<WorkerRelayEvents> {
|
|||||||
this.#migrate_v1();
|
this.#migrate_v1();
|
||||||
this.#log("Migrated to v1");
|
this.#log("Migrated to v1");
|
||||||
}
|
}
|
||||||
|
if (version < 2) {
|
||||||
|
this.#migrate_v2();
|
||||||
|
this.#log("Migrated to v2");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert an event to the database
|
* Insert an event to the database
|
||||||
*/
|
*/
|
||||||
event(ev: NostrEvent) {
|
event(ev: NostrEvent) {
|
||||||
let eventInserted = false;
|
if (this.#insertEvent(this.#db!, ev)) {
|
||||||
this.#db?.transaction(db => {
|
|
||||||
eventInserted = this.#insertEvent(db, ev);
|
|
||||||
});
|
|
||||||
if (eventInserted) {
|
|
||||||
this.#log(`Inserted: kind=${ev.kind},authors=${ev.pubkey},id=${ev.id}`);
|
this.#log(`Inserted: kind=${ev.kind},authors=${ev.pubkey},id=${ev.id}`);
|
||||||
this.emit("event", [ev]);
|
this.emit("event", [ev]);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return eventInserted;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -96,13 +97,11 @@ export class WorkerRelay extends EventEmitter<WorkerRelayEvents> {
|
|||||||
eventBatch(evs: Array<NostrEvent>) {
|
eventBatch(evs: Array<NostrEvent>) {
|
||||||
const start = unixNowMs();
|
const start = unixNowMs();
|
||||||
let eventsInserted: Array<NostrEvent> = [];
|
let eventsInserted: Array<NostrEvent> = [];
|
||||||
this.#db?.transaction(db => {
|
for (const ev of evs) {
|
||||||
for (const ev of evs) {
|
if (this.#insertEvent(this.#db!, ev)) {
|
||||||
if (this.#insertEvent(db, ev)) {
|
eventsInserted.push(ev);
|
||||||
eventsInserted.push(ev);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
if (eventsInserted.length > 0) {
|
if (eventsInserted.length > 0) {
|
||||||
this.#log(`Inserted Batch: ${eventsInserted.length}/${evs.length}, ${(unixNowMs() - start).toLocaleString()}ms`);
|
this.#log(`Inserted Batch: ${eventsInserted.length}/${evs.length}, ${(unixNowMs() - start).toLocaleString()}ms`);
|
||||||
this.emit("event", eventsInserted);
|
this.emit("event", eventsInserted);
|
||||||
@ -114,6 +113,7 @@ export class WorkerRelay extends EventEmitter<WorkerRelayEvents> {
|
|||||||
db.exec(`delete from events where id in (${this.#repeatParams(ids.length)})`, {
|
db.exec(`delete from events where id in (${this.#repeatParams(ids.length)})`, {
|
||||||
bind: ids,
|
bind: ids,
|
||||||
});
|
});
|
||||||
|
this.#log("Deleted", ids, db.changes());
|
||||||
}
|
}
|
||||||
|
|
||||||
#insertEvent(db: Database, ev: NostrEvent) {
|
#insertEvent(db: Database, ev: NostrEvent) {
|
||||||
@ -326,4 +326,14 @@ export class WorkerRelay extends EventEmitter<WorkerRelayEvents> {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#migrate_v2() {
|
||||||
|
this.#db?.transaction(db => {
|
||||||
|
db.exec("CREATE INDEX pubkey_kind_IDX ON events (pubkey,kind)");
|
||||||
|
db.exec("CREATE INDEX pubkey_created_IDX ON events (pubkey,created)");
|
||||||
|
db.exec("insert into __migration values(2, ?)", {
|
||||||
|
bind: [new Date().getTime() / 1000],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user