This commit is contained in:
Ben Allfree 2023-12-28 04:35:00 -08:00
parent 0cdd7520a9
commit b9693780b9
10 changed files with 103 additions and 3 deletions

View File

@ -4,6 +4,7 @@
import AdminSync from './AdminSync.svelte'
import DangerZoneTitle from './DangerZoneTitle.svelte'
import DeleteInstance from './DeleteInstance.svelte'
import DevMode from './DevMode.svelte'
import Maintenance from './Maintenance.svelte'
import RenameInstance from './RenameInstance.svelte'
import VersionChange from './VersionChange/VersionChange.svelte'
@ -29,5 +30,7 @@
<AdminSync />
<DevMode />
<DeleteInstance />
</div>

View File

@ -0,0 +1,47 @@
<script lang="ts">
import Card from '$components/cards/Card.svelte'
import CardHeader from '$components/cards/CardHeader.svelte'
import { DOCS_URL } from '$src/env'
import { client } from '$src/pocketbase-client'
import { instance } from '../store'
import ErrorMessage from './ErrorMessage.svelte'
const { updateInstance } = client()
$: ({ id, dev } = $instance)
let errorMessage = ''
const handleChange = (e: Event) => {
const target = e.target as HTMLInputElement
const isChecked = target.checked
// Update the database with the new value
updateInstance({ id, fields: { dev: isChecked } })
.then(() => 'saved')
.catch((error) => {
errorMessage = error.data.message || error.message
})
}
</script>
<Card>
<CardHeader documentation={DOCS_URL(`/usage/dev-mode`)}>Dev Mode</CardHeader>
<p class="mb-8">
Starting with PocketBase v0.20.1, your instance will show debugging output
in the instance logs. Performance is degraded while Dev Mode is active.
</p>
<ErrorMessage message={errorMessage} />
<label class="label cursor-pointer justify-center gap-4">
<span class="label-text">Dev Mode</span>
<input
type="checkbox"
class="toggle toggle-warning"
checked={!!dev}
on:change={handleChange}
/>
</label>
</Card>

View File

@ -0,0 +1,9 @@
---
title: Dev Mode
category: usage
description: Dev Mode shows PocketBase debugging output to the instance logs
---
Begining with PocketBase 0.20.1, you may supply a `--dev` flag to make PocketBase output debugging information to the console.
PocketHost supports this through the Dev Mode switch. When running in Dev Mode, your instance logs will show all debugging output.

View File

@ -58,6 +58,7 @@ global.EventSource = EventSource
name: MOTHERSHIP_NAME(),
slug: MOTHERSHIP_NAME(),
port: MOTHERSHIP_PORT(),
dev: DEBUG(),
env: {
DATA_ROOT: mkContainerHomePath(`data`),
},

View File

@ -0,0 +1,27 @@
/// <reference path="../pb_data/types.d.ts" />
migrate((db) => {
const dao = new Dao(db)
const collection = dao.findCollectionByNameOrId("etae8tuiaxl6xfv")
// add
collection.schema.addField(new SchemaField({
"system": false,
"id": "a5qqq8fs",
"name": "dev",
"type": "bool",
"required": false,
"presentable": false,
"unique": false,
"options": {}
}))
return dao.saveCollection(collection)
}, (db) => {
const dao = new Dao(db)
const collection = dao.findCollectionByNameOrId("etae8tuiaxl6xfv")
// remove
collection.schema.removeField("a5qqq8fs")
return dao.saveCollection(collection)
})

View File

@ -23,6 +23,7 @@ routerAdd(
version: null,
secrets: null,
syncAdmin: null,
dev: null,
},
})
@ -34,7 +35,7 @@ routerAdd(
const id = c.pathParam('id')
const {
fields: { subdomain, maintenance, version, secrets, syncAdmin },
fields: { subdomain, maintenance, version, secrets, syncAdmin, dev },
} = data
console.log(
@ -46,6 +47,7 @@ routerAdd(
version,
secrets,
syncAdmin,
dev,
}),
)
@ -78,6 +80,7 @@ routerAdd(
maintenance,
secrets,
syncAdmin,
dev,
})
const form = new RecordUpsertForm($app, record)

View File

@ -278,6 +278,7 @@ export const instanceService = mkSingleton(
name: instance.subdomain,
slug: instance.id,
port: newPort,
dev: instance.dev,
extraBinds: flatten([
globSync(join(INSTANCE_APP_MIGRATIONS_DIR(), '*.js')).map(
(file) =>

View File

@ -16,6 +16,7 @@ import { map } from '@s-libs/micro-dash'
import Docker, { Container, ContainerCreateOptions } from 'dockerode'
import { existsSync } from 'fs'
import MemoryStream from 'memorystream'
import { gte } from 'semver'
import { AsyncReturnType } from 'type-fest'
import { PocketbaseReleaseVersionService } from '../PocketbaseReleaseVersionService'
import { buildImage } from './buildImage'
@ -30,6 +31,7 @@ export type SpawnConfig = {
env?: Env
stdout?: MemoryStream
stderr?: MemoryStream
dev?: boolean
}
export type PocketbaseServiceApi = AsyncReturnType<
typeof createPocketbaseService
@ -78,9 +80,11 @@ export const createPocketbaseService = async (
env: {},
stderr: new MemoryStream(),
stdout: new MemoryStream(),
dev: false,
...cfg,
}
const { version, name, slug, port, extraBinds, env, stderr, stdout } = _cfg
const { version, name, slug, port, extraBinds, env, stderr, stdout, dev } =
_cfg
logger.breadcrumb(name).breadcrumb(slug)
const iLogger = InstanceLogger(slug, 'exec')
@ -123,6 +127,9 @@ export const createPocketbaseService = async (
const Cmd = (() => {
return [`./pocketbase`, `serve`, `--http`, `0.0.0.0:8090`]
})()
if (dev && gte(realVersion.version, `0.20.1`)) {
Cmd.push(`--dev`)
}
const createOptions: ContainerCreateOptions = {
Image: INSTANCE_IMAGE_NAME,

View File

@ -29,6 +29,7 @@ export type InstanceFields = BaseFields & {
maintenance: boolean
syncAdmin: boolean
cname: string
dev: boolean
}
export type WithUser = {

View File

@ -7,7 +7,7 @@ export type UpdateInstancePayload = {
fields: Partial<
Pick<
InstanceFields,
'maintenance' | 'secrets' | 'subdomain' | 'syncAdmin' | 'version'
'maintenance' | 'secrets' | 'subdomain' | 'syncAdmin' | 'version' | 'dev'
>
>
}
@ -44,6 +44,7 @@ export const UpdateInstancePayloadSchema: JSONSchemaType<UpdateInstancePayload>
},
required: [],
},
dev: { type: 'boolean', nullable: true },
},
},
},