From d9b14adc8d2e9263eb6a343f148724665df1cf31 Mon Sep 17 00:00:00 2001 From: seriousm4x Date: Mon, 14 Aug 2023 16:10:55 +0200 Subject: [PATCH] add lazy ping option --- backend/cronjobs/cronjobs.go | 4 +- .../1692020613_updated_settings_private.go | 48 +++++++++++++++++++ frontend/src/lib/types/settings.ts | 1 + frontend/src/routes/settings/+page.svelte | 30 ++++++++++-- 4 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 backend/migrations/1692020613_updated_settings_private.go diff --git a/backend/cronjobs/cronjobs.go b/backend/cronjobs/cronjobs.go index e59deea3..f7ec8751 100644 --- a/backend/cronjobs/cronjobs.go +++ b/backend/cronjobs/cronjobs.go @@ -21,9 +21,9 @@ func RunPing(app *pocketbase.PocketBase) { // init cronjob CronPing = cron.New() CronPing.AddFunc(settingsPrivateRecords[0].GetString("interval"), func() { - // skip cron if no realtime clients connected + // skip cron if no realtime clients connected and lazy_ping is turned on realtimeClients := len(app.SubscriptionsBroker().Clients()) - if realtimeClients == 0 { + if realtimeClients == 0 && settingsPrivateRecords[0].GetBool("lazy_ping") { return } // expand ports field diff --git a/backend/migrations/1692020613_updated_settings_private.go b/backend/migrations/1692020613_updated_settings_private.go new file mode 100644 index 00000000..190456cc --- /dev/null +++ b/backend/migrations/1692020613_updated_settings_private.go @@ -0,0 +1,48 @@ +package migrations + +import ( + "encoding/json" + + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/daos" + m "github.com/pocketbase/pocketbase/migrations" + "github.com/pocketbase/pocketbase/models/schema" +) + +func init() { + m.Register(func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("nmj3ko20gzkg8n3") + if err != nil { + return err + } + + // add + new_lazy_ping := &schema.SchemaField{} + json.Unmarshal([]byte(`{ + "system": false, + "id": "yjyq5pvg", + "name": "lazy_ping", + "type": "bool", + "required": false, + "unique": false, + "options": {} + }`), new_lazy_ping) + collection.Schema.AddField(new_lazy_ping) + + return dao.SaveCollection(collection) + }, func(db dbx.Builder) error { + dao := daos.New(db); + + collection, err := dao.FindCollectionByNameOrId("nmj3ko20gzkg8n3") + if err != nil { + return err + } + + // remove + collection.Schema.RemoveField("yjyq5pvg") + + return dao.SaveCollection(collection) + }) +} diff --git a/frontend/src/lib/types/settings.ts b/frontend/src/lib/types/settings.ts index 13f47d7d..46f5b3c8 100644 --- a/frontend/src/lib/types/settings.ts +++ b/frontend/src/lib/types/settings.ts @@ -9,5 +9,6 @@ export type SettingsPublic = Record & { export type SettingsPrivate = Record & { interval: number; + lazy_ping: boolean; scan_range: string; }; diff --git a/frontend/src/routes/settings/+page.svelte b/frontend/src/routes/settings/+page.svelte index 5e99772d..d648245b 100644 --- a/frontend/src/routes/settings/+page.svelte +++ b/frontend/src/routes/settings/+page.svelte @@ -67,8 +67,17 @@ .collection('settings_public') .update(settingsPubClone.id, settingsPubClone) .then((res) => { - toast.success('Saved settings'); settingsPub.set(res as SettingsPublic); + }) + .catch((err) => { + toast.error(err.message); + }); + await $pocketbase + .collection('settings_private') + .update(settingsPrivClone.id, settingsPrivClone) + .then((res) => { + toast.success('Saved settings'); + settingsPriv.set(res as SettingsPrivate); goto('/'); }) .catch((err) => { @@ -90,7 +99,7 @@ class="badge">@every 3s.

-

+

Learn more about the correct syntax for cron on Wikipedia or refer to the @@ -98,7 +107,7 @@ >package documentation.

-
+
+

Lazy ping

+

+ When lazy ping is turned on, UpSnap will only ping devices if there is an active user + visiting the website. If it's turned off, UpSnap will always ping devices. +

+
+ +