Compare commits

...

1 Commits

Author SHA1 Message Date
nameless c86f4b3c2e feat: maxDailyJobs
limit amount of daily jobs for user
2023-11-10 11:36:56 +00:00
2 changed files with 44 additions and 1 deletions

View File

@ -7,6 +7,7 @@ export const configSchema = {
pausedReason: { type: ["string", "null"] }, pausedReason: { type: ["string", "null"] },
maxUserJobs: { type: "number" }, maxUserJobs: { type: "number" },
maxJobs: { type: "number" }, maxJobs: { type: "number" },
maxDailyJobs: { type: "number" },
defaultParams: { defaultParams: {
type: "object", type: "object",
properties: { properties: {
@ -21,7 +22,7 @@ export const configSchema = {
}, },
}, },
}, },
required: ["adminUsernames", "maxUserJobs", "maxJobs", "defaultParams"], required: ["adminUsernames", "maxUserJobs", "maxJobs", "maxDailyJobs", "defaultParams"],
} as const satisfies JsonSchema; } as const satisfies JsonSchema;
export type Config = jsonType<typeof configSchema>; export type Config = jsonType<typeof configSchema>;
@ -33,6 +34,7 @@ export async function getConfig(): Promise<Config> {
pausedReason: config?.pausedReason ?? null, pausedReason: config?.pausedReason ?? null,
maxUserJobs: config?.maxUserJobs ?? Infinity, maxUserJobs: config?.maxUserJobs ?? Infinity,
maxJobs: config?.maxJobs ?? Infinity, maxJobs: config?.maxJobs ?? Infinity,
maxDailyJobs: config?.maxDailyJobs ?? Infinity,
defaultParams: config?.defaultParams ?? {}, defaultParams: config?.defaultParams ?? {},
}; };
} }
@ -43,6 +45,7 @@ export async function setConfig(newConfig: Partial<Config>): Promise<void> {
pausedReason: newConfig.pausedReason ?? oldConfig.pausedReason, pausedReason: newConfig.pausedReason ?? oldConfig.pausedReason,
maxUserJobs: newConfig.maxUserJobs ?? oldConfig.maxUserJobs, maxUserJobs: newConfig.maxUserJobs ?? oldConfig.maxUserJobs,
maxJobs: newConfig.maxJobs ?? oldConfig.maxJobs, maxJobs: newConfig.maxJobs ?? oldConfig.maxJobs,
maxDailyJobs: newConfig.maxDailyJobs ?? oldConfig.maxDailyJobs,
defaultParams: newConfig.defaultParams ?? oldConfig.defaultParams, defaultParams: newConfig.defaultParams ?? oldConfig.defaultParams,
}; };
await db.set(["config"], config); await db.set(["config"], config);

View File

@ -231,6 +231,46 @@ export function SettingsPage(props: { sessionId: string | null }) {
</label> </label>
</div> </div>
<label className="flex flex-col items-stretch gap-1">
<span className="text-sm">
Daily limit {newParams?.maxDailyJobs != null ? "(Changed)" : ""}
</span>
<span className="flex items-center gap-1">
<input
className="input-text w-20"
type="number"
min={1}
max={500}
step={1}
disabled={getParams.isLoading || !getUser.data?.admin}
value={newParams?.maxDailyJobs ??
getParams.data?.maxDailyJobs ??
0}
onChange={(e) =>
setNewParams((params) => ({
...params,
dailyLimit: Number(e.target.value),
}))}
/>
<input
className="input-range flex-grow"
type="range"
min={1}
max={500}
step={1}
disabled={getParams.isLoading || !getUser.data?.admin}
value={newParams?.maxDailyJobs ??
getParams.data?.maxDailyJobs ??
0}
onChange={(e) =>
setNewParams((params) => ({
...params,
maxDailyJobs: Number(e.target.value),
}))}
/>
</span>
</label>
{patchParamsError {patchParamsError
? ( ? (
<p className="alert"> <p className="alert">