Compare commits

..
2857 Commits
Author SHA1 Message Date
Maxwell BeckerandGitHub 93cce3fb60 2.3.1 (#1553)
* add static connection user agent

* include server alerting thresholds in list info to reduce query

* fix database registry accounts lost

* dev-1

* deploy 2.3.1-dev-2

* CoreReport -> KomodoReport

* stack update available avoid many GetStack call on tables

* deploy 2.3.1-dev-3

* dashboard tables toml respects tag filter

* add post execution invalidate for better feedback when ws update is missed

* resource selector select first result on settle

* skip GetPermission call for admin users

* fmt

* 2.3.1

* fix clippy lint

* ts 2.3.1
2026-07-31 14:01:30 -07:00
mbecker20 97efa4808a 2.3.0 2026-07-29 15:09:58 -07:00
8708f0f600 2.3.0 (#1520)
* dockerfile builds use latest rust 1.96.0

* bump rust and js dependencies

* deploy 2.3.0-dev-1

* omnisearch clear on close option (default true), fix omnisearch border radius cutting off search input

* fix resource description responsive overflow in some screen size

* kill process group

* Start wiring through shell timeout / external cancel options

* deploy 2.3.0-dev-2

* implement CommandOptions (timeout / cancel ability) throughout shell usage

* Add timeouts to read child commands

* deploy 2.3.0-dev-3

* remove periphery custom_timeout option, it doesn't function as timeout as expected

* customize command timeouts

* Ensure git is installed for clear error message

* deploy 2.3.0-dev-4

* deploy 2.3.0-dev-5

* deploy 2.3.0-dev-6

* swarm completed in roadmap

* unnecessary line

* Komodo v2 march 2026

* remove debub container ports logs

* remove log view console log

* Fix deployment tabs disappear

* align other resource store tab per resource id

* disable terminal tab when attached to swarm

* List All Docker Containers supports wildcard container name matching

* improve container pagination situation

* deploy 2.3.0-dev-7

* fix container data table search slowness

* deploy 2.3.0-dev-8

* ListAllStackServices, add stack services to omni search, All containers filter by tags (based on server)

* deploy 2.3.0-dev-9

* service icon correct size

* list all containers / services support filtering by state

* get latest image digest timeout 10s

* deploy 2.3.0-dev-10

* send keepalive pings on user websockets to survive idle proxy timeouts (#1486)

* bump mantine and other UI deps

* deploy 2.3.0-dev-11

* fix containers page server filter

* show server config always if no swarms exist

* DeleteTerminal: fix incoming stack / deployment names to ids internally

* single builder distribute to multiple specified servers

* deploy 2.3.0-dev-12

* fix server type builder config comment

* fix builder toml server_ids => server/s

* sync: fix alerter resources / except_resources using ids instead of names

* fix multi server builder resource page header

* deploy 2.3.0-dev-13

* fix builder resource header with multiple servers styling

* run dkf -> dku

* white background favicon + gen resources schema

* feat: break out cache/buffers and ZFS ARC from used memory (#1489)

* deploy 2.3.0-dev-14

* onmisearch improve finding containers / services

* refine service / container search

* deploy 2.3.0-dev-15

* deploy 2.3.0-dev-16

* bump mogh auth server, remove authors from cargo toml in line with newer spec

* deploy 2.3.0-dev-17

* improve selection of available building server, works when multiple builds sent simultaneously

* deploy 2.3.0-dev-18

* show stack services even when down

* improve stack services view when down

* deploy 2.3.0-dev-19

* mogh ui 0.7.0 including login page back button if already logged in

* deploy 2.3.0-dev-20

* fix containers pagination boundary

* fix update permissions on swarm

* deploy 2.3.0-dev-21

* skip alerting check on initial server cache refresh after startup

* deploy 2.3.0-dev-22

* Fix build - deployment flow when build doesn't publish semver image tags

* move check button to left of update available button

* omnisearch containers only fetch when query types

* Add cancel procedure / action apis

* add procedure / action cancel buttons

* deploy 2.3.0-dev-23

* Execution error

* useIsCancelling hook for better state conveyance

* fmt mem module

* allow all builders build to cancel during build

* deploy 2.3.0-dev-24

* bump rust to 1.96.1

* tweak ui index.html

* build webhook cancel build before triggering another - better behavior for back-to-back pushes

* deploy 2.3.0-dev-25

* De-vendor container apis from Docker

* deploy 2.3.0-dev-26

* startup support for pagination

* implement limit / page on the list routes

* swarm pagination and add swarm read support to cli

* use Option for limit

* resource selector and omni search using pagination / search

* deploy 2.3.0-dev-27

* update available disable action state polling in small

* resources page support pagination

* fix Image bug, improve resources page debounce

* fix omni missing !

* procedure failure update log provides link to view failed update

* fix omni search link ids with brute force query

* improve command error message formatting

* fix dashboard query for right resources

* attach linked resource names in addition to ids for efficient usage with pagination

* fix pagination bugs and improve pagination efficiency

* some brute force pagination fixes still with limit: 0

* deploy 2.3.0-dev-28

* replace limit: 0 server query with proper search based multi selector

* list api support filtering by state, use with dashboard active table

* Fix state filter pagination and create terminal limit: 0 queries

* deploy 2.3.0-dev-29

* deployment / stack filter by swarm id

* deploy 2.3.0-dev-30

* improve database query efficiency on large resource sets

* fix ListFull not filtering by query states

* fix the list permits respect resource.base_permission

* use saturating mul in skip computations

* Fix list all containers / stack services - tags query, terms case insensitive

* deploy 2.3.0-dev-31

* api based list resource sorting which works with pagination

* ui implement server side table sort

* fix cli usage

* deploy 2.3.0-dev-32

* ensure required refetch intervals are still passed for data freshness

* omni search services before containers

* add Deployment custom_name configuration to set specific container name

* GetResourceMatchingContainer fix empty container passed check

* validate conatiner / docker compatible names protect against injection

* track deployment deployed name for smooth swarm service renaming behavior

* deploy 2.3.0-dev-33

* batch executions support filtering by tag

* fix clippy lint

* improve tag multi selector matching resource sync config

* deploy 2.3.0-dev-34

* fix containers page networks / volumes wrapping

* use enum cmp for sorting by state

* container page uses api based sort

* move list stack methods

* deploy 2.3.0-dev-35

* stack / deployment state sorting prefers update available shown first

* ensure name is always fallback sort

* deploy 2.3.0-dev-36

* fix Source sorting for stacks, builds, syncs

* deploy 2.3.0-dev-37

* keepPreviousData method to prevent lots of loading flashes

* omni search tweaks / fixes

* fix clear on close

* paginated schedules

* for efficient schedule sort

* paginated terminals

* fix terminals cli

* fix clippy lint

* deploy 2.3.0-dev-38

* configurable default pagination, including 0 (no pagination)

* deploy 2.3.0-dev-39

* omnisearch use keepPreviousData

* Fix omni search auto highlight first item

* drop resource action guard / reset action state before pushing updates to clients for requery

* deploy 2.3.0-dev-40

* builder instance type use divided children

* default pagination limit 50

* UI: useDebouncedTermSearch hook

* stats page

* deploy 2.3.0-dev-41

* page description tweak

* dashboard tables show template query mode

* fix stats page legend over tooltip

* setup-periphery.py: add "--core-public-keys" command line argument (#1524)

* only log core public keys if provided

* fix terminal execute echo colliding with output sentinels (#1522)

Build the execute command as a single physical line so the PTY's local
echo cannot reproduce a bare sentinel line before the real output. The
`printf` format strings now use literal `\n` escapes (which printf
expands) instead of embedded newline bytes, keeping the emitted output
byte-identical while making the echoed command one line.

Closes #1289


Claude-Session: https://claude.ai/code/session_01M1ZTEJFKv3BAW36VmBwe2v

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* deploy 2.3.0-dev-42

* nowrap on server stats containers table

* improve Resources tabs with pagination support and multi select executions

* allow simultaneous server container execs

* Container page batch executions

* use controlled selection state for resources for proper clearing selection state after delete

* deploy 2.3.0-dev-43

* server docker resources multi select

* server docker tabs move execute button

* fix: log webhook branch-mismatch skips at debug instead of warn (#1528)

Git providers send push webhooks for every branch and Komodo filters
them server side (docs: Automate > Webhooks > Branch Filtering), so a
push to a non-matching branch is routine operation, not a failure. It
was surfaced through the generic 'Failed at running webhook' warn,
indistinguishable from genuine failures, and a repo with active bot
branches (e.g. Renovate) produces hundreds of these warns per day.

Rename ExtractBranch::verify_branch to branch_matches, returning
Ok(false) on a mismatch (logged at debug) so handlers skip quietly,
matching the existing silent webhook_enabled=false skip. Branch
EXTRACTION failures (e.g. a ref-less payload on a named-branch
listener) still return Err and reach the warn, preserving the
misconfiguration signal.

* fix: parse compose config before sanitizing so secret replacers cannot corrupt service detection (#1529)

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Maxwell Becker <49575486+mbecker20@users.noreply.github.com>

* clean up fix compose parse / sanitize ordering

* deploy 2.3.0-dev-44

* user permissioning fix search

* Fix GetHistoricalServerStats pagination

* server stats list (avoiding lots of queries) and server side sorting by stats (cpu, mem, disk)

* fix clippy lint

* deploy 2.3.0-dev-45

* fix ui build after monaco bump

* load average chart first in stats

* Fix deployment build version selector

* remove build version console log

* provide logical core count, update load to reflect

* deploy 2.3.0-dev-46

* add basic reporting functionality

* Add / fix shell escaping for periphery commands

* safe stdin token and prevent args passed through resource names on shell

* deploy 2.3.0-dev-47

* Delete only batch executions just use delete button

* add New / batch executions to dashboard tables

* rust 1.97.1

* deploy 2.3.0-dev-48

* default key reporting.key

* default reporting.key

* redeploy on build for all running unhealthy states (rebuild to fix eg restarting issue)

* resource updates query memo missing buildId in deps

* deploy 2.3.0-dev-49

* Fix reporting signature

* deploy 2.3.0-dev-50

---------

Co-authored-by: Remco Jongschaap <hey@dougley.com>
Co-authored-by: ChanningHe <52875777+ChanningHe@users.noreply.github.com>
Co-authored-by: Amos Shapira <amos.shapira@gmail.com>
Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com>
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Christopher Plieger <917744+cplieger@users.noreply.github.com>
2026-07-29 15:08:28 -07:00
mbecker20 5c301020c1 Docs: Community: Terraform Provider Komodo + Scaling Renovate 2026-05-11 18:44:37 -07:00
mbecker20 f66754ef9e 2.2.0 ui quickfix - bump mantine, fix tag height on chrome/safari 2026-05-08 13:52:25 -07:00
mbecker20 2aa8a441df Actually bump mogh ui version for oidc auto redirect 2026-05-07 14:31:05 -07:00
mbecker20 1674ce2d51 fix docker build requires xtask folder copy 2026-05-07 14:30:07 -07:00
0d462fb2e0 2.2.0 (#1387)
* fix login page import

* update to mantine v9, reduce the border radius on some things

* deploy 2.2.0-dev-1

* move theme to mogh ui

* start moving stuff to mogh_ui

* move more components to mogh_ui

* move section to mogh_ui

* move confirm button

* move colors and formatting to mogh_ui

* move more to mogh_ui

* move more components to mogh ui

* move entity header / page to mogh ui

* move monaco to mogh_monaco

* move config / monaco to mogh ui

* move text update modal to mogh ui, empty ui folder

* deploy 2.2.0-dev-2

* move auth hooks to mogh_ui

* move login to mogh ui

* move profile management to mogh ui

* add missing dedupe deps

* bump mogh ui deps

* expand shell process path static load

* move filterBySplit to mogh_ui

* align core aio dockerfile

* bump mogh ui

* add published mogh_auth_client

* comment about onboarding key

* fix lockfile

* bump mogh ui

* improve doc comment on CoreInfo public_key

* UI: topbar home butotn use Link instead of nav, cmd click open in new tab

* Minor: Update periphery.config.toml (#1365)

* Minor: Update periphery.config.toml

Make docs on ROOT_DIRECTORY more clear

This change relates to line:
> ## Each specific sub-directory (like ./stacks) can be overridden below.

The change includes `./builds` directory to the list as it also can be overridden. Thus, a reader will have better understanding of the resulting root directory structure

* Update compose.env

* fix cli multi arch dockerfile and bump other dockerfiles

* Add OIDC auto-redirect config to Core (#1339)

* Add OIDC auto-redirect config to Core

When KOMODO_OIDC_AUTO_REDIRECT=true, the login options response
includes oidc_auto_redirect, enabling the UI (via mogh-lib) to
automatically redirect unauthenticated users to the OIDC provider.
Users can bypass by appending ?disableAutoLogin to the login URL.

Depends on moghtech/lib UI change adding auto-redirect to LoginPage.

Closes #311

* Skip OIDC auto-redirect for Add Account link

The user dropdown's Add Account button navigates to /login to add
another account. When OIDC auto-redirect is enabled, this link must
opt out so the user can actually sign in as a different user instead
of being redirected back to the already-authenticated OIDC session.

* bump deps

* deploy 2.2.0-dev-3

* Fix swarm deployment Tasks and Inspect tabs

* Fix build cancel button variant default

* RunSync: Make sure resource sync changes run after repo changes due to dependency

* deploy 2.2.0-dev-4

* deploy 2.2.0-dev-5

* fmt

* impl mogh server 1.5.0 configuration security headers

* to the user

* agents send

* let user specify if they want command to be run in shell-mode (#1265)

* allow users to add commands as shell-mode

* revert package.json yarn auto-change

* cargo fmt

* bump bollard and other deps

* gen client

* deploy 2.2.0-dev-6

* bump dockerfile rust version 1.95.0

* document new core configurations

* deploy 2.2.0-dev-7

* 2 small UI fixes (#1379)

* fix: prevent horizontal page scroll on long action log lines

Add white-space: pre-wrap to Code component pre elements rendering
stdout/stderr in action last-run, update details, and build info views.

* fix: UI Defined and Files on Server text too large in stacks table

---------

Co-authored-by: twalts <t.mwalton@yahoo.com>

* X-Frame-Options

* Add support to generate resource json schema (#1337)

* add support to generate resource json schema

* remove unnecessary renames

---------

Co-authored-by: Maxwell Becker <49575486+mbecker20@users.noreply.github.com>

* generate resource schema

* resources.json

* deploy 2.2.0-dev-8

* fix build.version schema (can be string)

* add resource toml comments

* deploy 2.2.0-dev-9

* use draft 07 for better taplo compat

* deploy 2.2.0-dev-10

* builder fix exported toml server_id -> server

* deploy 2.2.0-dev-11

* bump mogh auth

* deploy 2.2.0-dev-12

* Allow excluding services from global auto update  (#1279)

* add ignore_polling_services for global auto update

* rename ignore_polling_services to auto_update_skip_services and reorganize

* fix stack auto_update check show skip services

* deploy 2.2.0-dev-13

* 2.2.0

* bold "relative to the root of the repo"

---------

Co-authored-by: Andrii Bratanin <20169213+andriibratanin@users.noreply.github.com>
Co-authored-by: John Maguire <contact@johnmaguire.me>
Co-authored-by: Shen Li <dustet@gmail.com>
Co-authored-by: T <github@mail.taylor.media>
Co-authored-by: twalts <t.mwalton@yahoo.com>
Co-authored-by: bytedream <git+github@bytedream.dev>
Co-authored-by: mateuszziolkowski <88323671+mateuszziolkowski@users.noreply.github.com>
2026-05-07 11:19:55 -07:00
John MaguireandGitHub ca01407090 Add per-provider user registration control (#1321)
Add granular registration flags:
- KOMODO_DISABLE_LOCAL_USER_REGISTRATION — blocks local signups,
  hides Sign Up button, while allowing OIDC registration
- KOMODO_DISABLE_OIDC_USER_REGISTRATION — blocks OIDC signups
  while allowing local registration

Both are optional and fall back to the existing
KOMODO_DISABLE_USER_REGISTRATION when not set. This enables the
common pattern of letting your OIDC provider control access while
preventing direct local account creation.

Depends on mogh-lib change adding per-provider registration methods
to the AuthImpl trait.

Closes #1087
2026-05-06 16:06:55 -07:00
Maxwell BeckerandGitHub 20b9d16d4b 2.1.2 (#1347)
* 2.1.2 fix multi file service override UI crash

* deploy 2.1.2-dev-1

* 2.1.2
2026-04-10 11:32:17 -07:00
Maxwell BeckerandGitHub 7c95823eb0 2.1.1 (#1314)
* start 2.1.1 to fix swarm auto updates

* correctly extract image and digest from swarm stacks / deployments

* 2.1.1 fix swarm auto updates not picking up

* fmt
2026-04-02 14:55:44 -07:00
mbecker20 254622078e rust 1.94.1 2026-04-01 16:11:27 -07:00
38421d6719 2.1.0 (#1285)
* fix swarm config content hidden

* 2.0.1-dev-1

* bump ts deps

* align swarm config links

* StackServiceRun command is actually optional

* fix swarm not included in read resource toml

* deploy 2.0.1-dev-2

* logger support disabling timestamps (eg if they are already provided by docker logs)

* full opacity tag color selector

* Add UpdateSwarmNode execution and convert several large repetive blocks to macro handling

* add node update functionality

* deploy 2.0.1-dev-3

* deploy 2.1.0-dev-1

* toml variable export sorted by name

* deploy 2.1.0-dev-2

* dont use detach=false because it can hang indefinitely on misconfigured stacks

* deploy 2.1.0-dev-3

* swarm stack deploy explicitly '--detach=true' to avoid future changes in behavior

* fmt

* UI: Stack config: Fix Add Env File button

* fix swarm error propogation, add server connection error hover message

* deploy 2.1.0-dev-4

* fix service rm (should be stack rm

* fix container ports not displaying when server address not available for link

* fix build registry custom org configuration

* github action: comment out cache step (leads to no space on device)

* fix missing nullish check when selecting stack (#1287)

* fix container selector null crash

* provider selector custom input label adheres to showLabel

* fix: show/hide button non-functional in stack, sync, and build info views (#1267)

Co-authored-by: twalts <t.mwalton@yahoo.com>

* swarm stack support env vars through shell source file method

* tweaks

* bump deps

* deploy 2.1.0-dev-5

* auto update should work with swarm

* deploy 2.1.0-dev-6

* 2.1.0

---------

Co-authored-by: Shen Li <dustet@gmail.com>
Co-authored-by: T <github@mail.taylor.media>
Co-authored-by: twalts <t.mwalton@yahoo.com>
2026-04-01 16:08:29 -07:00
mbecker20 0f96794559 add ghpages CNAME 2026-03-26 13:05:06 -07:00
mbecker20 d79fefff17 add breaking notice about bullseye and periphery compose example with correct key path 2026-03-26 13:02:39 -07:00
mbecker20 4626b4a477 fix deep compare short path for falsy / null 2026-03-25 02:27:46 -07:00
mbecker20 150a8a160d fix terminals page new terminals menu 2026-03-25 01:56:20 -07:00
mbecker20 5b3bb9b8bb Use :2 to stay up to date
with all future Komodo v2 releases.
2026-03-24 18:40:19 -07:00
mbecker20 79831f29af Improved auto updates 2026-03-24 18:38:03 -07:00
mbecker20 b68f5abd25 fix: max width on git commit messages 2026-03-24 17:46:00 -07:00
mbecker20 2325899ebf quick fix swarm config (UI only) 2026-03-24 17:42:09 -07:00
mbecker20 23fd208f0f cli docker alias need :2 in the image 2026-03-24 16:53:45 -07:00
mbecker20 19904e00b9 docs on terminals 2026-03-24 16:48:58 -07:00
mbecker20 8880b1c948 km exec finds server name for connection log 2026-03-24 16:45:33 -07:00
mbecker20 e47c8d2b62 docsite fix privileged typo 2026-03-24 16:17:31 -07:00
mbecker20 1addb8fccd update roadmap with swarm support 2026-03-24 07:04:25 -07:00
08e55b5180 2.0.0 (#889)
* modularize openapi structs

* most of execute openapi

* server / stack exec openapi

* most of write openapi

* more write openapi

* add the write openapi definitions

* fmt and bump mogh auth

* gen types

* remove user api, mogh auth handles api keys

* clean up

* cache latest image digests and use this for image update alerting / auto update

* deploy 2.0.0-dev-108

* deploy 2.0.0-dev-109

* add back legacy Action "exec" method calling convention

* typegen

* improve config quick links styling

* improve config styling a bit more

* deploy 2.0.0-dev-110

* finish version upgrades page, and use prism theme oneLight and oneDark

* stack level terminal page

* fix Action import from terminal

* clean up dangling action api keys on startup

* improve swarm service / stack state inference

* deploy 2.0.0-dev-111

* add api docs link

* bump ts types and fix SwarmConfig type name conflict

* use mogh auth for passkey conversion

* align dashboard icon with sidebar

* bump frontend node version

* bump node version in all the dockerfiles

* fix tailwind config module

* fix require to import

* skip auto update for images with pinned digest

* dev 112

* cleanup

* batch check for updates, add check to table multi select actions

* dev-113

* mogh_server = "1.2.0"

* serve static ui index.html with ETag / no-cache

* check update available against all digests for image

* deploy 2.0.0-dev-114

* bump rust to 1.93.0

* bump mogh server and auth

* configure session allow cross site

* deploy 2.0.0-dev-115

* add new config value to example config

* Stack check for update prefers check against deployed service image

* deploy 2.0.0-dev-116

* only send auto updated alert after verifying the deploy was successful

* 2.0.0 UI (#1220)

* new ui using mantine

* resources page

* prog on resource page

* resources and resource layouts

* confirm button and modal

* tweaks

* update details

* topbar updates

* add skeletons for resource implementations

* add resource tables

* add tags to recents cards

* resource page table scrolling

* table component + tags filter

* export toml

* New Resource button

* Fix update details capture closing

* tweaks

* omni search

* refine config

* config tweaks

* implement more configs / resource selector

* add profile page

* provider / account selectors

* container table page

* build config

* deployment config

* fix deployment build version selector

* fix secrets selector

* resource sync config

* mobile topbar and updates

* update details fz sm

* stack config

* terminals page

* create terminal in prog

* create terminal menu

* finish create terminal menu

* terminal pages working

* stack tabs / info

* add executions

* add server header info

* confirm pubkey modal

* improve resource header styling

* FileSource component

* stack service table, move icons.ts

* basic procedure config

* tweak procedure config

* container / image pages

* network / volume pages

* clean up docker resource pages

*  basic log / terminal ui

* reusable log section

* styling

* clean up resource components

* delete in resource header

* log auto select stderr

* fix some bgs

* stack logs with service selector

* stack terminals

* add deployment executions

* use correct icon

* useResource hooks

* build info

* build info

* tweaks

* server tabs

* fix terminal section target

* prog on server tabs

* server stats

* light theme

* start on historical stats

* stack service page

* resource sync tabs

* sync tabs

* more topbar icons

* add settings basic

* add topbar alerts

* tweak stream selector behavior

* tweak alert icon topbar

* improve styling smaller screen

* schedules page and other progress

* onboarding keys

* improve schedule page descriptions

* improve update notifications

* schedule timezone selector

* tag color selector

* finish settings / providers

* use shared-text-update component so settings tables aren't janky

* updates page

* refine updates page

* alert page

* standardize borders

* theme and swarm

* swarm tabs

* swarm node page

* swarm config page

* swarm pages

* swarm task and secret pages

* swarm stack page

* fix stack log service selector in swarm mode

* standard inspect section

* swarm inspect tab

* server and swarm resources tab

* add disable confirm dialog (modal) option for executions

* stack update available indicator

* deployment update available

* add template switch to resource headers

* ResourceHeader + rename

* set editing name onclick

* repo tabs

* server stats table

* refine a bit

* refine deployment / stack header info

* show server stats dashboard. dashboard tables

* action last run in config

* SettingsUsers page

* user page etc

* manage api key

* user base permissions

* color the table multi select

* user group page

* UserAddUserGroup

* active includes deployments / stacks

* improve small screen view

* fix docker pages execution showing

* clean up

* rename frontend to UI

* align profile page styling

* config maintenance windows

* finish maintenance windows

* builder config

* add batch execute dropdown / confirm menu

* batch execute styling

* deploy 2.0.0-dev-117

* improve stats card light theme

* add update page

* improve mobile

* terminal group nowrap

* mobile improvements

* allow unused again

* improve mobile font sizing

* improve mobile updates / alerts

* mobile tabs

* alert page

* add server version mismatch color

* new resource, clearable selector

* Fix build show info tab

* copy resources

* keyboard shortcuts

* server resource header version mismatch

* fix type errors

* container page server multi select

* confirm button clear timeout

* hash compare force uses first 8 for short hash

* fix log height

* copy webhooks

* responsive tweaks

* add icons to server stat sections

* add historical server stats charts

* server stat current card shows usage numbers

* refine current stats more

* fix shortcuts interfering with monaco brave

* clean up unused

* remove v1 frontend

* bump rust version to 1.93.1 and dep versions

* deploy 2.0.0-dev-118

* bump chef rust version

* improve login no auth configured and passkey pending

* Load Average is first historical stat

* procedure / action webhook branch mobile style

* dashboard active styling

* hide actions when none

* Select Template

* execution buttons disabled when loading

* Fix config input issue

* improve tab styling

* rename ConfigSwitch onChange -> onCheckedChange

* ensure section headers consistent spacing

* edit swarm join command

* fix batch executions width

* stack stopped and deployment exited warning instead of critical

* smaller more consistent gaps

* add close button to update / alert details drawer

* stack and deployment state color include update available. Ensure server version mismatch color applied everywhere

* deploy 2.0.0-dev-120

* topbar user dropdown shows user avatar if available

* post link redirect should be to profile

* deploy 2.0.0-dev-121

* improve profile delete styling

* standard api key modal size

* improve login styling

* fix login github / google icon color

* fix some wrapping stuff in tables and tag text disappear

* fix terminal height - same as logs

* single delete terminal

* Update / Alert table filter selector formatted

* tweaks for lg size

* taller data table and blue omnisearch

* refine lg screen size view

* fix sidebar margin right

* "never" -> "Never"

* Add hoverable disk info

* improve disk usage hover card styling

* rename for clarity

* thinner topbar

* config sidebar save

* setters use maps instead of mutations

* notification green contents written success

* fmt

* read request are trace

* deploy 2.0.0-dev-122

* debug level core <> periphery auth identifiers logs

* mogh auth server 1.2.10

* mogh auth 1.2.11

* deploy 2.0.0-dev-123

* Deploy / DeployStack updates invalidate corresponding list query

* confirm action / save modals don't need ConfirmButton

* deploy 2.0.0-dev-124

* proper base64url decode

* fix init admin user

* improve mobile friendly tabs width, and onboardng key copy

* rename resource invalidates

* better maxheight for mobile friendly tabs

* km cli needs to install crypto provider for tls ws

* better responsive confirm save width

* confirm modal better responsiveness

* Fix api key modal too thin

* better api key create

* improve batch execs

* improve tabs

* sidebar more compact

* add missing Repo header Info

* Fix Pull repo

* fix repo Links config

* improve procedure config UI including run stack service

* improve deployment network, restart, termination signal config

* fix confirm update showing entries which have not changed

* example execute terminal uses bash

* Update deployments description

* move build server

* [Docs] Update connect-servers.mdx (#1256)

* Update connect-servers.mdx

* Update connect-servers.mdx

* clean up connect servers

* feat(ci): build (#1018)

* fmt

* fix: more verbose logging (#1017)

* use .with_context for stack run directory canonicalize log

* fix failing doc test

* Improve server resource header hover info

* service selector support swarm stack icon

* fix stack terminals sometimes not disabled when it should be

* add terminal create and delete messages

* bump packages and add Mogh Tech copyright

* revamp docsite

* soften the borders

* clean up stack config

* fix config group header too much gap

* procedure stage menu easier to reach

* deploy 2.0.0-dev-125

* increase universal resource polling

* improve server stats

* fix data table

* down node is critical

* cli add print core info

* add docker swarm feature card

* improve toml resource repetition using macros, and fix Swarm toml support

* swarm config: configure alerting options

* add swarm header info

* Implement New Swarm Config and New Swarm Secret

* brighten tag colors

* continue docs revamp

* fmt

* set more refetch intervals to keep display data fresh

* fix copy not showing copy source when there are no templates

* rename onboarding key fix_existing_servers to privileged

* fix Privileged spelling

* fmt

* more docs improvement

* improve docs intro

* update the curl instructions with easier call method

* fix clippy lints

* refresh the server cache after every server connection successful login

* deploy 2.0.0-dev-126

* add polling to dashboard summary data

* tweak tag opacity

* improve server stat table disk hover

* fix change historical stat length collapse stats

* KOMODO_DISABLE_INIT_RESOURCES

* stack Project Missing should be red

* Fix files on host stacks showing down after reboot until refresh cache

* silence user level write logs SetLastSeenUpdate and PushRecentlyViewed

* See the v2 migration guide

* Improve api logging using more fields

* deploy 2.0.0-dev-127

* cli create api key on database, can use with docker exec into core container

* deploy 2.0.0-dev-128

* advanced km create api-key options

* create onboarding key with cli

* tweak

* onboarding keys use tag name

* deploy 2.0.0-dev-129

* stack procedure stages can select specific services to apply to (default all services)

* docsite dockerfile

* ./docusaurus.config.ts

* need to yarn build

* fix broken link

* improve alert (dropdown) icons

* fix docs sidebar collapse

* add local search functionality

* docs search nice

* homepage features navigate to docs

* only show build cancel when canCancel

* more confirm button confirmprops red

* fix docsite buttons and list more features

* fix sidebar cmd click opens in new tab (is a link)

* execute withBorder

* cleaner execute section

* swap docker compose and deploy containers

* make docs logo align with app

* better mobile button layout

* linked logins / 2fa confirm red styling

* bump rust version to 1.94.0

* move bollard::secret to bollard::config

* deploy 2.0.0-dev-130

* feat: add compose_cmd_wrapper_include for selective command wrapping (#1124)

- Add compose_cmd_wrapper_include field to StackConfig.
- Fix wrapper placeholder text not displaying in MonacoEditor.

* align configuration by removing bold label stuff

* confirm update monaco readonly

* dockerfile binaries / ui images default to :2

* fmt

* refresh server cache lint

* fmt

* disabling send alerts should also disable in UI

* clean up disabled alerting

* deploy 2.0.0-dev-131

* mogh_pki 1.1.3 safer copy from slice

* fix dev container issues on 2.0.0 (#1238)

* fix node version and yarn build in dev container

* ensure keys directories exist and are writable in dev container

* update dev container  image (necessary to fix compiler error)

* fix CORS error in dev container

* more dev container fixes

KOMODO_SESSION_ALLOW_CROSS_SITE: true needed to properly run on Firefox

* fix devcontainer port

* update config pages to use "Webhooks" consistently and fix acronym casing (#1239)

Co-authored-by: Maxwell Becker <49575486+mbecker20@users.noreply.github.com>

* update local dev setup instructions (#1240)

* example mongo deploy dev

* check binary URL (#1116)

* install script improve failed download binary log

* align cli installer with periphery installer

* improve terminal page create experience

* deploy 2.0.0-dev-132

* improve mobile updates with full size query

* fix some internal table wrapping

* fix schedule expression examples

* Add swarm updates / alerts filter

* filter by update available uses location hash instead of localstorage

* sync commit preserve meta "deploy" and "after"

* UI fixes and tweaks

* deploy 2.0.0-dev-133

* add error to warn log

* Stack / deployment should inherit specific Swarm permissions

* Fix inline span formatting (used in logs / errors)

* refactor resource sync pending deploy for better display

* deploy 2.0.0-dev-134

* improve terminal error handling

* deploy 2.0.0-dev-135

* dedicated docs page for v2

* warning about failing to include init: true

* Limit Periphery IPs in Advanced config

* refine setup guide

* 2.0.0

---------

Co-authored-by: Shlee <github@shl.ee>
Co-authored-by: Yujia Qiao <code@rapiz.me>
Co-authored-by: ChanningHe <52875777+ChanningHe@users.noreply.github.com>
Co-authored-by: Steven Loria <sloria1@pm.me>
Co-authored-by: Andreas Brett <andreasbrett@users.noreply.github.com>
2026-03-24 05:50:10 -07:00
Maxwell BeckerandGitHub 34a9f8eb9e 1.19.5 (#846)
* start 1.19.5

* deploy 1.19.5-dev-1

* avoid execute_and_poll error when update is already complete or has no id

* improve image tagging customization

* 1.19.5 release
2025-09-27 13:29:16 -07:00
mbecker20 494d01aeed RequireAuth redirect when no jwt 2025-09-14 14:05:43 -07:00
mbecker20 084e2fec23 1.19.4 2025-09-14 12:32:58 -07:00
98d72fc908 1.19.4 (#812)
* start 1.19.4

* deploy 1.19.4-dev-1

* try smaller binaries with cargo strip

* deploy 1.19.4-dev-2

* smaller binaries with cargo strip

* Fix Submit Dialog Button Behavior with 500 Errors on Duplicate Names (#819)

* Implement enhanced error handling and messaging for resource creation

* Implement improved error handling for resource creation across alerter, build, and sync

* Implement error handling improvements for resource copying and validation feedback

* Adjust error handling for resource creation to distinguish validation errors from unexpected system errors

* Refactor resource creation error handling by removing redundant match statements and simplifying the error propagation in multiple API modules.

* fmt

* bump indexmap

* fix account selector showing empty when account no longer found

* clean up theme logic, ensure monaco and others get up to date current theme

* enforce disable_non_admin_create for tags. Clean up status code responses

* update server cache concurrency controller

* deploy 1.19.4-dev-3

* Allow signing in by pressing enter (#830)

* Improve dialog overflow handling to prevent clipping of content (#828)

* Add Email notification entry to community.md (#824)

* Add clickable file path to show/hide file contents in StackInfo (#827)

* add clickable file path to show/hide file contents in StackInfo

Also added CopyButton due to the new functionality making the file path not selectable.

* Move clicking interaction to CardHeader

* Avoid sync edge cases of having toggle show function capturing showContents from outside

Co-authored-by: Maxwell Becker <49575486+mbecker20@users.noreply.github.com>

* Format previous change

* Add `default_show_contents` to `handleToggleShow`

---------

Co-authored-by: Maxwell Becker <49575486+mbecker20@users.noreply.github.com>

* deploy 1.19.4-dev-4

* avoid stake info ShowHideButton double toggle

* Allow multiple simultaneous Action runs for use with Args

* deploy 1.19.4-dev-5

* feat: persist all table sorting states including unsorted (#832)

- Always save sorting state to localStorage, even when empty/unsorted
- Fixes issue where 'unsorted' state was not persisted across page reloads
- Ensures consistent and predictable sorting behavior for all DataTable components

* autofocus on login username field (#837)

* Fix unnecessary auth queries flooding console on login page (#842)

* Refactor authentication error handling to use serror::Result and status codes

* Enable user query only when JWT is present

* Enable query execution in useRead only if JWT is present

* Revert backend auth changes - keep PR focused on frontend only

* Fix unnecessary API queries to unreachable servers flooding console (#843)

* Implement server availability checks in various components

* Refactor server availability check to ensure only healthy servers are identified

* cargo fmt

* fmt

* Auth error handling with status codes (#841)

* Refactor authentication error handling to use serror::Result and status codes

* Refactor error messages

* Refactor authentication error handling to include status codes and improve error messages

* clean up

* clean

* fmt

* invalid user id also UNAUTHORIZED

* deploy 1.19.4-dev-6

* deploy 1.19.4-dev-7

---------

Co-authored-by: Marcel Pfennig <82059270+MP-Tool@users.noreply.github.com>
Co-authored-by: jack <45038833+jackra1n@users.noreply.github.com>
Co-authored-by: Guten <ywzhaifei@gmail.com>
Co-authored-by: Paulo Roberto Albuquerque <paulora2405@gmail.com>
Co-authored-by: Lorenzo Farnararo <2814802+baldarn@users.noreply.github.com>
2025-09-14 12:32:06 -07:00
azrikaharandGitHub 20ac04fae5 fix navigation link to users page via omnibar (#838) 2025-09-11 10:04:45 -07:00
a65fd4dca7 1.19.3 (#792)
* start. 1.19.3

* deploy 1.19.3-dev-1

* repo state from db includes BuildRepo success

* clean up version mismatch text

* feat(containers): debounced search input and added filter by server name (#796)

* Fix cleaning Alerter resource whitelist / blacklist on resource delete re #581

* fmt

* Fix signup button not working correctly (#801)

* Improve route protection and authentication flow (#798)

* Improve route protection and authentication flow

* Cleanup

* fix: inconsistent behaviour of new resource create button (#800)

* fix monaco crashing with absolute path config files

* deploy 1.19.3-dev-2

* proofread config

* Fix #427

* deploy 1.19.3-dev-3

* poll logs use println

* Sync: Only show commit / execute when viewing pending tab

* Improve sync UX

* deploy 1.19.3-dev-4

* bold link

* remove claims about database resource usage.

* 1.19.3

---------

Co-authored-by: mbecker20 <max@mogh.tech>
Co-authored-by: Antonio Sarro <tech@antoniosarro.dev>
Co-authored-by: jack <45038833+jackra1n@users.noreply.github.com>
2025-09-05 13:41:58 -07:00
mbecker20 0873104b5a fmt 2025-08-31 19:13:14 -07:00
9a7b6ebd51 1.19.2 (#764)
* 1.19.2-dev-0

* deploy 1.19.2-dev-1

* Add option to make run command detachable (#766)

* improve missing files log to include the missing paths

* bump mungos for urlencoding mongo creds

* Update permissioning.md - typo: "priviledges" -> "privileges" (#770)

* Add support for monaco-yaml and docker compose spec validatiaon (#772)

* deploy 1.19.2-dev-2

* on delete user, remove from all user groups

* fix Google login issues around `picture`

* unsafe_unsanitized_startup_config

* improve git provider support re #355

* should fix #468

* should fix exit code re #597

* deploy 1.19.2-dev-3

* fix container ports sorting (#776)

* missing serde default

* deploy 1.19.2-dev-4

* ensure git tokens trimmed in remote url

* Add link to Authentik support docs

* Fix incorrect commit branch when using linked repo re #634

* Better display container port ranges (#786)

* ensure build and sync also commit to correct branch. re #634

* deploy 1.19.2-dev-5

* Improve login form (#788)

* Use proper form for login, add autocomplete and names to input fields

* Do not return null if loading

* Remove unused function

* Cleanup and streamline

* improve login screen flash on reload

* first builder given same name as first server

* 1.19.2

---------

Co-authored-by: mbecker20 <max@mogh.tech>
Co-authored-by: Brian Bradley <brian.bradley.p@gmail.com>
Co-authored-by: Ravi Wolter-Krishan <rkn@gedikas.net>
Co-authored-by: Christopher Hoage <iam@chrishoage.com>
Co-authored-by: jack <45038833+jackra1n@users.noreply.github.com>
2025-08-31 19:08:45 -07:00
mbecker20 a4153fa28b fix UI showing Redeploy when its actually None 2025-08-24 14:30:43 -07:00
e732da3b05 1.19.1 (#740)
* start 1.19.1

* deploy 1.19.1-dev-1

* Global Auto Update rustdoc

* support stack additional files

* deploy 1.19.1-dev-2

* Fe support additional file language detection

* fix tsc

* Fix: Example code blocks got interpreted as rust code, leading to compilation errors (#743)

* Enhanced Server Stats Dashboard with Performance Optimizations (#746)

* Improve the layout of server mini stats in the dashboard.

- Server stats and tags made siblings for clearer responsibilities
- Changed margin to padding
- Unreachable indicator made into an overlay of the stats

* feat: optimize dashboard server stats with lazy loading and smart server availability checks

- Add enabled prop to ServerStatsMini for conditional data fetching
- Implement server availability check (only fetch stats for Ok servers, not NotOk/Disabled)
- Prevent 500 errors by avoiding API calls to offline servers
- Increase polling interval from 10s to 15s and add 5s stale time
- Add useMemo for expensive calculations to reduce re-renders
- Add conditional overlay rendering for unreachable servers
- Only render stats when showServerStats preference is enabled

* fix: show disabled servers with overlay instead of hiding component

- Maintain consistent layout by showing disabled state overlay
- Prevent UX inconsistency where disabled servers disappeared entirely

* fix: show button height

* feat: add enhance card animations

* cleanup

* gen types

* deploy 1.19.1-dev-3

* add .ini

* deploy 1.19.1-dev-4

* simple configure action args as JSON

* server enabled actually defaults false

* SendAlert via Action / CLI

* fix clippy if let string

* deploy 1.19.1-dev-5

* improve cli ergonomics

* gen types and fix responses formatting

* Add RunStackService API implementing `docker compose run` (#732)

* Add RunStackService API implementing `docker compose run`

* Add working Procedure configuration

* Remove `km execute run` alias. Remove redundant ``#[serde(default)]` on `Option`.

* Refactor command from `String` to `Vec<String>`

* Implement proper shell escaping

* bump deps

* Update configuration.md - fix typo: "affect" -> "effect" (#747)

* clean up SendAlert doc

* deploy 1.19.1-dev-6

* env file args won't double pass env file

* deploy 1.19.1-dev-7

* Add Enter Key Support for Dialog Confirmations (#750)

* start 1.19.1

* deploy 1.19.1-dev-1

* Implement usePromptHotkeys for enhanced dialog interactions and UX

* Refactor usePromptHotkeys to enhance confirm button detection and improve UX

* Remove forceConfirmDialog prop from ActionWithDialog and related logic for cleaner implementation

* Add dialog descriptions to ConfirmUpdate and ActionWithDialog for better clarity and resolve warnings

* fix

* Restore forceConfirmDialog prop to ActionWithDialog for enhanced confirmation handling

* cleanup

* Remove conditional className logic from ConfirmButton

---------

Co-authored-by: mbecker20 <max@mogh.tech>

* Support complex file depency action resolution

* get FE compile

* deploy 1.19.1-dev-8

* implement additional file dependency configuration

* deploy 1.19.1-dev-9

* UI default file dependency None

* default additional file requires is None

* deploy 1.19.1-dev-10

* rename additional_files => config_files for clarity

* deploy 1.19.1-dev-11

* fix skip serializing if None

* deploy 1.19.1-dev-12

* stack file dependency toml parsing aliases

* fmt

* Add: Server Version Mismatch Warnings & Alert System (#748)

* start 1.19.1

* deploy 1.19.1-dev-1

* feat: implement version mismatch warnings in server UI
- Replace orange warning colors with yellow for better visibility
- Add version mismatch detection that shows warnings instead of OK status
Implement responsive "VERSION MISMATCH" badge layout
- Update server dashboard to include warning counts
- Add backend version comparison logic for GetServersSummary

* feat: add warning count to server summary and update backup documentation link

* feat: add server version mismatch alert handling and update server summary invalidation logic

* fix: correct version mismatch alert config and disabled server display

- Use send_version_mismatch_alerts instead of send_unreachable_alerts
- Show 'Unknown' instead of 'Disabled' for disabled server versions
- Remove commented VersionAlert and Alerts UI components
- Update version to 1.19.0

* cleanup

* Update TypeScript types after merge

* cleanup

* cleanup

* cleanup

* Add "ServerVersionMismatch" to alert types

* Adjust color classes for warning states and revert server update invalidation logic

---------

Co-authored-by: mbecker20 <max@mogh.tech>

* backend for build multi registry push support

* deploy 1.19.1-dev-13

* build multi registry configuration

* deploy 1.19.1-dev-14

* fix invalid tokens JSON

* DeployStackIfChanged restarts also update stack.info.deployed_contents

* update deployed services comments

* deploy 1.19.1-dev-15

* Enhance server monitoring with load average data and new server monitoring table (#761)

* add monitoring page

* initial table

* moving monitoring table to servers

* add cpu load average

* typeshare doesnt allow tuples

* fix GetHistoricalServerStats

* add loadAvg to the server monitoring table

* improve styling

* add load average chart

* multiple colors for average loads chart

* make load average chart line and non-stacked

* cleanup

* use server thresholds

* cleanup

* Change "Dependents:" to "Services:" in config file service dependency
selector

* deploy 1.19.1-dev-16

* 1.19.1

---------

Co-authored-by: mbecker20 <max@mogh.tech>
Co-authored-by: Marcel Pfennig <82059270+MP-Tool@users.noreply.github.com>
Co-authored-by: Brian Bradley <brian.bradley.p@gmail.com>
Co-authored-by: Ravi Wolter-Krishan <rkn@gedikas.net>
Co-authored-by: jack <45038833+jackra1n@users.noreply.github.com>
2025-08-24 12:51:04 -07:00
Marcel PfennigandGitHub 75ffbd559b Fix: Correct environment variable name for container stats polling rate (#752)
* docs(config): Update environment variable name and default value for container stats polling rate

* fix(config): Update default value for container stats polling rate to 30 seconds
2025-08-21 15:01:10 -07:00
mbecker20 cae80b43e5 fix ferret v2 migration link 2025-08-18 16:38:03 -07:00
mbecker20 d924a8ace4 fix ferret v2 upgrade link 2025-08-18 11:36:25 -07:00
Karl WoditschandGitHub dcfad5dc4e docs(docker-compose): Fix obsolete repo-cache volume declaration (#741) 2025-08-18 11:29:38 -07:00
mbecker20 134d1697e9 include backups path in env / yaml 2025-08-18 10:46:20 -07:00
mbecker20 3094d0036a edit cli docs 2025-08-17 21:00:04 -07:00
mbecker20 ee5fd55cdb first server commented out in default config 2025-08-17 18:39:27 -07:00
mbecker20 0ca126ff23 fix broken docs links before publish 2025-08-17 18:21:01 -07:00
+2 2fa9d9ecce 1.19.0 (#722)
* start 1.18.5

* prevent empty additional permission check (ie for new resources)

* dev-2

* bump rust to 1.88

* tweaks

* repo based stack commit happens from core repo cache rather than on server to simplify

* clippy auto fix

* clippy lints periphery

* clippy fix komodo_client

* dev-3

* emphasize ferret version pinning

* bump svi with PR fix

* dev-4

* webhook disabled early return

* Fix missing alert types for whitelist

* add "ScheduleRun"

* fix status cache not cleaning on resource delete

* dev-5

* forgot to pipe through poll in previous refactor

* refetch given in ms

* fix configure build extra args

* reorder resource sync config

* Implement ability to run actions at startup (#664)

* Implement ability to run actions at startup

* run post-startup actions after server is listening

* startup use action query

* fmt

* Fix Google Login enabled message (#668)

- it was showing "Github Login" instead of "Google Login"

* Allow CIDR ranges in Allowed IPs (#666)

* Allow CIDR ranges in Allowed IPs

* Catch mixed IPv4/IPv6 mappings that are probably intended to match

* forgiving vec

* dev-6

* forgiving vec log. allowed ips docs

* server stats UI: move current disk breakdown above charts

* searchable container stats, toggle collaple container / disk sections

* Add Clear repo cache method

* fix execute usage docs

* Komodo managed env-file should take precedence in all cases (ie come last in env file list)

* tag include unused flag for future use

* combine users page search

* util backup / restore

* refactor backup/restore duplication

* cleanup restore

* core image include util binary

* dev-7

* back to LinesCodec

* dev-8

* clean up

* clean up logs

* rename to komodo-util

* dev-9

* enable_fance_toml

* dev-10 enable fancy toml

* add user agent to oidc requests (#701)

Co-authored-by: eleith <online-github@eleith.com>

* fmt

* use database library

* clippy lint

* consolidate and standardize cli

* dev-11

* dev-12 implement backup using cli

* dev-13 logs

* command variant fields need to be #[arg]

* tweak cli

* gen client

* fix terminal reconnect issue

* rename cli to `km`

* tweaks for the cli logs

* wait for enter on --yes empty println

* fix --yes

* dev-15

* bump deps

* update croner to latest, use static parser

* dev-16

* cli execute polls updates until complete before logging

* remove repo cache mount

* cli nice

* /backup -> /backups

* dev-17 config loading preserves CONFIG_PATHS precedence

* update dockerfile default docker cli config keywords

* dev-18

* support .kmignore

* add ignores log

* Implement automatic backup pruning, default 14 backups before prune

* db copy / restore uses idempotent upsert

* cli update variable - "km set var VAR value"

* improve cli initial logs

* time the executions

* implement update for most resources

* dev 20

* add update page

* dev 21 support cli update link

* dev-22 test the deploy

* dev-23 use indexmap

* install-cli.py

* Frontend mobile fixes (#714)

* Allow ResourcePageHeader items to wrap

* Allow CardHeader items to wrap

* Increase z-index of sticky TableHeader, fixes #690

* Remove fixed widths from ActionButton, let them flex more to fit more layouts

* Make Section scroll overflow

* Remove grid class from Tabs, seems to prevent them from overflowing at small sizes

* deploy 1.18.5-dev-24

* auto version increment and deploy

* cli: profiles support aliases and merge on top of Default (root) config

* fix page set titles

* rust 1.89 and improve config logs

* skip serializing for proper merge

* fix clippy lints re 1.89

* remove layouts overflow-x-scroll

* deploy 1.18.5-dev-25

* 1.89 docker images not ready yet

* km cfg -a (print all profiles)

* include commit variables

* skip serializing profiles when empty

* skip serialize default db / log configs

* km cfg --debug print mode

* correct defaults for CLI and only can pass restore folder from cli arg

* some more skip serialization

* db restore / copy index optional

* add runfile command aliases

* remove second schedule updating loop, can causes some schedules to be missed

* deploy 1.18.5-dev-26

* add log when target db indexing disabled

* cli: user password reset, update user super admin

* Add manual network interface configuration for multi-NIC Docker environments (#719)

* Add iproute2 to debian-debs

* feat: Add manual network interface configuration for multi-NIC support

Complete implementation of manual interface configuration:
- Add internet_interface config option
- Implement manual gateway routing
- Add NET_ADMIN capability requirement
- Clean up codebase changes

* fix: Update internet interface handling for multi-NIC support

* refactor: Enhance error messages and logging in networking module

* refactor: Simplify interface argument handling and improve logging in network configuration and cleanup

* refactor(network): simplify startup integration and improve error handling

- Move config access and error handling into network::configure_internet_gateway()
- Simplify startup.rs to single function call without parameters
- Remove redundant check_network_privileges() function
- Improve error handling by checking actual command output instead of pre-validation
- Better separation of concerns between startup and network modules

Addresses feedback from PR discussion:
https://github.com/moghtech/komodo/pull/719#discussion_r2261542921

* fix(config): update default internet interface setting
Addresses feedback from PR discussion:
https://github.com/moghtech/komodo/pull/719#discussion_r2261552279

* fix(config): remove custom default for internet interface in CoreConfig

* move mod.rs -> network.rs
Addresses feedback from PR discussion:
https://github.com/moghtech/komodo/pull/719#discussion_r2261558332

* add internet interface example

* docs(build-images): document multi-platform builds with Docker Buildx (#721)

* docs(build-images): add multi-platform buildx guide to builders.md

* docs(build-images): add multi-platform buildx guide and clarify platform selection in Komodo UI Extra Args field

* move to 1.19.0

* core support reading from multiple config files

* config support yaml

* deploy 1.19.0-dev-1

* deploy 1.19.0-dev-2

* add default komodo cli config

* better config merge with base

* no need to panic if empty config paths

* improve km --help

* prog on cli docs

* tweak cli docs

* tweak doc

* split the runfile commands

* update docsite deps

* km ps initial

* km ls

* list resource apis

* km con inspect

* deploy 1.19.0-dev-3

* fix: need serde default

* dev-4 fix container parsing issue

* tweak

* use include-based file finding for much faster discovery

* just move to standard config dir .config/komodo/komodo.cli.*

* update fe w/ new contianer info minimal serialization

* add links to table names

* deploy 1.19.0-dev-5

* links in tables

* backend for Action arguments

* deploy 1.19.0-dev-6

* deploy 1.19.0-dev-7

* deploy 1.19.0-dev-8

* no space at front of KeyValue default args

* webhook branch / body optional

* The incoming arguments

* deploy 1.19.0-dev-9

* con -> cn

* add config -> cf alias

* .kmignore

* .peripheryinclude

* outdated

* optional links, configurable table format

* table_format -> table_borders

* get types

* include docsite in yarn install

* update runnables command in docs

* tweak

* improve km ls only show important stuff

* Add BackupCoreDatabase

* deploy 1.19.0-dev-10

* backup command needs "--yes"

* deploy 1.19.0-dev-11

* update rustc 1.89.0

* cli tweak

* try chef

* Fix chef (after dependencies)

* try other compile command

* fix

* fix comment

* cleanup stats page

* ensure database backup procedure

* UI allow configure Backup Core Database in Procedures

* procedure description

* deploy 1.19.0-dev-12

* deploy 1.19.0-dev-13

* GlobalAutoUpdate

* deploy 1.19.0-dev-14

* default tags and global auto update procedure

* deploy 1.19.0-dev-15

* trim the default procedure descriptions

* deploy 1.19.0-dev-16

* in "system" theme, also poll for updates to the theme based on time.

* Add next run to Action / Procedure column

* km ls support filter by templates

* fix procedure toml serialization when params = {}

* deploy 1.19.0-dev-17

* KOMODO_INIT_ADMIN_USERNAME

* KOMODO_FIRST_SERVER_NAME

* add server.config.external_address for use with links

* deploy 1.19.0-dev-18

* improve auto prune

* fix system theme auto update

* deploy 1.19.0-dev-19

* rename auth/CreateLocalUser -> SignUpLocalUser. Add write/CreateLocalUser for in-ui initialization.

* deploy 1.19.0-dev-20

* UI can handle multiple active logins

* deploy 1.19.0-dev-21

* fix

* add logout function

* fix oauth redirect

* fix multi user exchange token function

* default external address

* just Add

* style account switcher

* backup and restore docs

* rework docsite file / sidebar structure, start auto update docs

* auto update docs

* tweak

* fix doc links

* only pull / update running stacks / deployments images

* deploy 1.19.0-dev-22

* deploy 1.19.0-dev-23

* fix #737

* community docs

* add BackupCoreDatabase link to docs

* update ferret v2 update guide using komodo-cli

* fix data table headers overlapping topbar

* don't alert when deploying

* CommitSync returns Update

* deploy 1.19.0-dev-24

* trim the decoded branch

* action uses file contents deserializer

* deploy 1.19.0-dev-25

* remove Toml from action args format

* clarify External Address purpose

* Fix podman compatibility in `get_container_stats` (#739)

* Add podman compability for querying stats

Podman and docker stats differ in results in significant ways but this filter change they will output the same stats

* syntax fix

* feat(dashboard): display CPU, memory, and disk usage on server cards (#729)

* feat: mini-stats-card: Expose Server CPU , Memory, Disk Usage to Dashboard View

* comment: resolved

* Feat: fix overflow card , DRY stats-mini, add unreachable mini stats

* lint: fix

* deploy 1.19.0-dev-26

* 1.19.0

* linux, macos container install

* cli main config

---------

Co-authored-by: Brian Bradley <brian.bradley.p@gmail.com>
Co-authored-by: Daniel <daniel.barabasa@gmail.com>
Co-authored-by: eleith <eleith@users.noreply.github.com>
Co-authored-by: eleith <online-github@eleith.com>
Co-authored-by: Sam Edwards <sam@samedwards.ca>
Co-authored-by: Marcel Pfennig <82059270+MP-Tool@users.noreply.github.com>
Co-authored-by: itsmesid <693151+arevindh@users.noreply.github.com>
Co-authored-by: mbecker20 <max@mogh.tech>
Co-authored-by: Rhyn <Rhyn@users.noreply.github.com>
Co-authored-by: Anh Nguyen <tuananh131001@gmail.com>
2025-08-17 17:25:45 -07:00
118ae9b92c 1.18.4 (#604)
* update easy deps

* update otel deps

* implement template in types + update resource meta

* ts types

* dev-2

* dev-3 default template query is include

* Toggle resource is template in resource header

* dev-4 support CopyServer

* gen ts

* style template selector in New Resource menu

* fix new menu show 0

* add template market in omni search bar

* fix some dynamic import behavior

* template badge on dashboard

* dev-5

* standardize interpolation methods with nice api

* core use new interpolation methods

* refactor git usage

* dev-6 refactor interpolation / git methods

* fix pull stack passed replacers

*  new types

* remove redundant interpolation for build secret args

* clean up periphery docker client

* dev-7 include ports in container summary, see if they actually come through

* show container ports in container table

* refresh processes without tasks (more efficient)

* dev-8 keep container stats cache, include with ContainerListItem

* gen types

* display more container ports

* dev-9 fix repo clone when repo doesn't exist initially

* Add ports display to more spots

* fix function name

* add Periphery full container stats api, may be used later

* server container stats list

* dev-10

* 1.18.4 release

* Use reset instead of invalidate to fix GetUser spam on token expiry (#618)

---------

Co-authored-by: Jacky Fong <hello@huzky.dev>
2025-06-24 16:32:39 -07:00
LukeandGitHub 2205a81e79 Update webhooks.md (#611) 2025-06-20 11:56:05 -07:00
mbecker20 e2280f38df fix: allow Build / Repo add Attach permission 2025-06-16 00:40:24 -07:00
Maxwell BeckerandGitHub 545196d7eb 1.18.3 (#603)
* start 1.18.3 branch

* git::pull will fetch before checkout

* dev-2

* 1.18.3 quick release
2025-06-15 23:45:50 -07:00
23f8ecc1d9 1.18.2 (#591)
* feat: add maintenance window management to suppress alerts during planned activities (#550)

* feat: add scheduled maintenance windows to server configuration

- Add maintenance window configuration to server entities
- Implement maintenance window UI components with data table layout
- Add maintenance tab to server interface
- Suppress alerts during maintenance windows

* chore: enhance maintenance windows with types and permission improvements

- Add chrono dependency to Rust client core for time handling
- Add comprehensive TypeScript types for maintenance windows (MaintenanceWindow, MaintenanceScheduleType, MaintenanceTime, DayOfWeek)
- Improve maintenance config component to use usePermissions hook for better permission handling
- Update package dependencies

* feat: restore alert buffer system to prevent noise

* fix yarn fe

* fix the merge with new alerting changes

* move alert buffer handle out of loop

* nit

* fix server version changes

* unneeded buffer clear

---------

Co-authored-by: mbecker20 <becker.maxh@gmail.com>

* set version 1.18.2

* failed OIDC provider init doesn't cause panic, just  error log

* OIDC: use userinfo endpoint to get preffered username for user.

* add profile to scopes and account for username already taken

* search through server docker lists

* move maintenance stuff

* refactor maintenance schedules to have more toml compatible structure

* daily schedule type use struct

* add timezone to core info response

* frontend can build with new maintenance types

* Action monaco expose KomodoClient to init another client

* flatten out the nested enum

* update maintenance schedule types

* dev-3

* implement maintenance windows on alerters

* dev-4

* add IanaTimezone enum

* typeshare timezone enum

* maintenance modes almost done on servers AND alerters

* maintenance schedules working

* remove mention of migrator

* Procedure / Action schedule timezone selector

* improve timezone selector to display configure core TZ

* dev-5

* refetch core version

* add version to server list item info

* add periphery version in server table

* dev-6

* capitalize Unknown server status in cache

* handle unknown version case

* set server table sizes

* default resource_poll_interval 1-hr

* ensure parent folder exists before cloning

* document Build Attach permission

* git actions return absolute path

* stack linked repos

* resource toml replace linked_repo id with name

* validate incoming linked repo

* add linked repo to stack list item info

* stack list item info resolved linked repo information

* configure linked repo stack

* to repo links

* dev-7

* sync: replace linked repo with name for execute compare

* obscure provider tokens in table view

* clean up stack write w/ refactor

* Resource Sync / Build start support Repo attach

* add stack clone path config

* Builds + syncs can link to repos

* dev-9

* update ts

* fix linked repo not included in resource sync list item info

* add linked repo UI for builds / syncs

* fix commit linked repo sync

* include linked repo syncs

* correct Sync / Build config mode

* dev-12 fix resource sync inclusion w/ linked_repo

* remove unneed sync commit todo!()

* fix other config.repo.is_empty issues

* replace ids in all to toml exports

* Ensure git pull before commit for linear history, add to update logs

* fix fe for linked repo cases

* consolidate linked repo config component

* fix resource sync commit behavior

* dev 17

* Build uses Pull or Clone api to setup build source

* capitalize Clone Repo stage

* mount PullOrCloneRepo

* dev-19

* Expand supported container names and also avoid unnecessary name formatting

* dev-20

* add periphery /terminal/execute/container api

* periphery client execute_container_exec method

* implement execute container, deployment, stack exec

* gen types

* execute container exec method

* clean up client / fix fe

* enumerate exec ts methods for each resource type

* fix and gen ts client

* fix FE use connect_exec

* add url log when terminal ws fail to connect

* ts client server allow terminal.js

* FE preload terminal.js / .d.ts

* dev-23 fix stack terminal fail to connect when not explicitly setting container name

* update docs on attach perms

* 1.18.2

---------

Co-authored-by: Samuel Cardoso <R3D2@users.noreply.github.com>
2025-06-15 16:42:36 -07:00
4d401d7f20 1.18.1 (#566)
* 1.18.1

* improve stack header / all resource links

* disable build config selector

* clean up deployment header

* update build header

* builder header

* update repo header

* start adding repo links from api

* implement list item repo link

* clean up fe

* gen client

* repo links across the board

* include state tracking buffer, so alerts are only triggered by consecutive out of bounds conditions

* add runnables-cli link in runfile

* improve frontend first load time through some code splitting

* add services count to stack header

* fix repo on pull

* Add dedicated Deploying state to Deployments and Stacks

* move predeploy script before compose config (#584)

* Periphery / core version mismatch check / red text

* move builders / alerts out of sidebar, into settings

* remove force push

* list schedules api

* dev-1

* actually dev-3

* fix action

* filter none procedures

* fix schedule api

* dev-5

* basic schedules page

* prog on schedule page

* simplify schedule

* use name to sort target

* add resource tags to schedule

* Schedule page working

* dev-6

* remove schedule table type column

* reorder schedule table

* force confirm  dialogs for delete, even if disabled in config

* 1.18.1

---------

Co-authored-by: undaunt <31376520+undaunt@users.noreply.github.com>
2025-06-06 23:08:51 -07:00
mbecker20 4165e25332 further clarify ferretdb setup for existing users 2025-06-01 13:50:03 -04:00
Maxwell BeckerandGitHub 4cc0817b0f Update copy-database.md 2025-05-30 15:08:19 -07:00
mbecker20 51cf1e2b05 clarify mongo / ferret in docs 2025-05-30 17:14:42 -04:00
mbecker20 5309c70929 update runfile 2025-05-30 17:01:15 -04:00
mbecker20 1278c62859 update specific permission in docs 2025-05-30 16:58:28 -04:00
mbecker20 6d6acdbc0b fix permissions list 2025-05-30 16:49:27 -04:00
mbecker20 d22000331e remove logging driver from compose example 2025-05-30 16:14:21 -04:00
31034e5b34 1.18.0 (#555)
* ferretdb v2 now that they support arm64

* remove ignored for sqlite

* tweak

* mongo copier

* 1.17.6

* primary name is ferretdb option

* give doc counts

* fmt

* print document count

* komodo util versioned seperately

* add copy startup sleep

* FerretDB v2 upgrade guide

* tweak docs

* tweak

* tweak

* add link to upgrade guide for ferretdb v1 users

* fix copy batch size

* multi arch util setup

* util use workspace version

* clarify behavior re root_directory

* finished copying database log

* update to rust:1.87.0

* fix: reset rename editor on navigate

* loosen naming restrictions for most resource types

* added support for ntfy email forwarding (#493)

* fix alerter email option docs

* remove logging directive in example compose - can be done at user discretion

* more granular permissions

* fix initial fe type errors

* fix the new perm typing

* add dedicated ws routes to connect to deployment / stack terminal, using the permissioning on those entities

* frontend should convey / respect the perms

* use IndexSet for SpecificPermission

* finish IndexSet

* match regex or wildcard resource  name pattern

* gen ts client

* implement new terminal components which use the container / deployment / stack specific permissioned endpoints

* user group backend "everyone" support

* bump to 1.18.0 for significant permissioning changes

* ts 1.18.0

* permissions FE in prog

* FE permissions assignment working

* user group all map uses ordered IndexMap for consistency

* improve user group toml and fix execute bug

* URL encode names in webhook urls

* UI support configure 'everyone' User Group

* sync handle toggling user group everyone

* user group table show everyone enabled

* sync will update user group "everyone"

* Inspect Deployment / Stack containers directly

* fix InspectStackContainer container name

* Deployment / stack service inspect

* Stack / Deployment inherit Logs, Inspect and Terminal from their attached server for user

* fix compose down not capitalized

* don't use tabs

* more descriptive permission table titles

* different localstorage for permissions show all

* network / image / volume inspect don't require inspect perms

* fix container inspect

* fix list container undefined error

* prcesses list gated UI

* remove localstorage on permission table expansion

* fix ug sync handling of all zero permissions

* pretty log startup config

* implement actually pretty logging initial config

* fix user permissions when api returns string

* fix container info table

* util based on bullseye-slim

* permission toml specific skip_serializing_if = "IndexSet::is_empty"

* container tab permissions reversed

* reorder pretty logging stuff to be together

* update docs with permissioning info

* tweak docs

* update roadmap

---------

Co-authored-by: FelixBreitweiser <felix.breitweiser@uni-siegen.de>
2025-05-30 12:52:58 -07:00
AvalancsandGitHub a43e1f3f52 Add Keycloak instructions to OIDC setup (#517) 2025-05-18 15:49:11 -07:00
jeroenvdsandGitHub 7a3b2b542d Removing ServerTemplate in docs (#492)
Removing ServerTemplate from Resources documentation, as it was removed in Release v1.17.5
2025-05-08 02:43:45 -04:00
Cesar VillegasandGitHub 8d516d6d5f fix: api_key -> key in Typescript client initialization (#485) 2025-05-06 11:22:02 -07:00
Maxwell BeckerandGitHub 3e0d1befbd 1.17.5 (#472)
* API support new calling syntax

* finish /{variant} api to improve network logs in browser console

* update roadmap

* configure the shell used to start the pty

* start on ExecuteTerminal api

* Rename resources less hidden - click on name in header

* update deps

* execute terminal

* BatchPullStack

* add Types import to Actions, and don't stringify the error

* add --reload for cached deps

* type execute terminal response as AsyncIterable

* execute terminal client api

* KOMODO_EXIT_CODE

* Early exit without code

* action configurable deno dep reload

* remove ServerTemplate resource

* kept disabled

* rework exec terminal command wrapper

* debug: print lines in start sentinel loop

* edit debug / remove ref

* echo

* line compare

* log lengths

* use printf again

* check char compare

* leading \n

* works with leading \n

* extra \n after START_OF_OUTPUT

* add variables / secrets finders to ui defined stacks / builds

* isolate post-db startup procedures

* clean up server templates

* disable websocket reconnect from core config

* change periphery ssl enabled to default to true

* git provider selector config pass through disable to http/s button

* disable terminals while allowing container exec

* disable_container_exec in default config

* update ws reconnect implementation

* Don't show delete tag non admin and non owner

* 1.17.5 complete
2025-05-04 14:45:31 -07:00
mbecker20 5dc609b206 add examples for perihery config fields 2025-04-28 18:14:40 -04:00
mbecker20 f1127007c3 update intro with shell features 2025-04-27 19:21:55 -04:00
Maxwell BeckerandGitHub 765e5a0df1 1.17.4 (#446)
* add terminal (ssh) apis

* add core terminal exec method

* terminal typescript client method

* terminals WIP

* backend for pty

* add ts responses

* about wire everything

* add new blog

* credit Skyfay

* working

* regen lock

* 1.17.4-dev-1

* pty history

* replace the test terminal impl with websocket (pty)

* create api and improve frontend

* fix fe

* terminals

* disable terminal api on periphery

* implement write level terminal perms

* remove unneeded

* fix clippy

* delete unneeded

* fix waste cpu cycles

* set TERM and COLORTERM for shell environment

* fix xterm scrolling behavior

* starship promp in periphery container terminal

* kill all terminals on periphery shutdown signal

* improve starship config and enable ssl in compose

* use same scrollTop setter

* fix periphery container distribution link

* support custom command / args to init terminal

* allow fully configurable init command

* docker exec into container

* add permissioning for container exec

* add starship to core container

* add delete all terminals

* dev-2

* finished gen client

* core need curl

* hide Terminal trigger if disabled

* 1.17.4
2025-04-27 15:53:23 -07:00
mbecker20 76f2f61be5 1.17.3 fix Build pre_build functionality. 2025-04-24 22:03:46 -04:00
b43e2918da 1.17.2 (#409)
* start on cron schedules

* rust 1.86.0

* config periphery directories easier with PERIPHERY_ROOT_DIRECTORY

* schedule backend

* fix config switch toggling through disabled

* procedure schedule working

* implement schedules for actions

* update schedule immediately after last run

* improve config update logs using toml diffs backend

* improve the config update logs with TOML diff view

* add schedule alerting

* version 1.17.2

* Set TZ in core env

* dev-1

* better term signal labels

* sync configurable pending alert send

* fix monaco editor height on larger screen

* poll update until complete on client

update lib

* add logger.pretty option for both core and periphery

* fix pretty

* configure schedule alert

* configure failure alert

* dev-3

* 1.17.2

* fmt

* added pushover alerter (#421)

* fix up pushover

* fix some clippy

---------

Co-authored-by: Alex Shore <alex@shore.me.uk>
2025-04-18 23:14:10 -07:00
EtienneandGitHub f45205011e Fix compose.env (#415)
Flip "stacks" and "repos" paths
2025-04-15 12:11:48 -07:00
5b211fb8f0 1.17.1 (#383)
* interpolate into slack / discord url

* fix js client docs

* js client should be type: module

* click table tags to toggle tag filter

* git token helper early return when empty provider

* reorder Stack fields

* action support interpolation doc

* Fix for the {account} login fails when the account name contains '$' (#385)

* GetDeploymentsSummary (#386)

* added GetDockerContainersSummary endpoint in rust api

* typescript stuff

* more autogenned typescript stuff

* fixed comments to be in line with actual behaviour

* fixed ReadResponse for GetDockerContainersSummary

* I64 -> u32 for response types

* more accurate error context

* backend for build files on host / ui defined

* core api supports non repo based build

* Ntfy as Alerter (#404)

* add ntfy alerter

* add ntfy alerter

* add ntfy alerter

---------

Co-authored-by: GFXSpeed <github@schafhaupt.com>

* Improve docs around running periphery in a container (#402)

* Add ports that need to be exposed if periphery is remote from core

* Spelling: overide -> override

* Add info about using a custom config file when running periphery in docker

* clean up ntfy alerter

* clean up ResourceSyncConfig

* update build cache after create / update

* refresh stack cache log

* Build UI Defined / file on host frontend

* update clap + rustls

* don't cleanup build files

* clean up dockerfile full path

* update BuildListItemInfo + UI table

* add Other Resources page

* add 5 second ws reconnection timeout

* Make listener address configurable & Add support for IPv6 (#405)

* Make listener address configurable

* Make listener address configurable for periphery

* rename listener_address -> bind_ip

---------

Co-authored-by: Jacky Fong <hello@huzky.dev>
Co-authored-by: Alex Shore <kntrllr@gmail.com>
Co-authored-by: Niklas <108990063+GFXSpeed@users.noreply.github.com>
Co-authored-by: GFXSpeed <github@schafhaupt.com>
Co-authored-by: theRAAPster <theraapster@gmail.com>
Co-authored-by: Daniel Vos <45820840+vosdev@users.noreply.github.com>
2025-04-14 14:48:12 -07:00
Justin GoetteandGitHub 3f04614303 docs: Typo (#392)
FerretDB vs. FerritDB
2025-04-02 00:05:29 -07:00
mbecker20 4c3210f70a update dashboard screenshots with colored tags 2025-03-23 23:17:33 -07:00
mbecker20 2c37ac26a5 ts client 1.17.0 2025-03-23 17:42:47 -07:00
db1cf786ac 1.17.0 (#248)
* resolver v3

add new ec2 instance types

clean up testing config

document the libraries a bit

clean up main

update sysinfo and otel

update client resolver 3.0

resolver v3 prog

clean up gitignore

implement periphery resolver v3

clean up

core read api v3

more prog

execute api

missing apis

compiling

1.16.13

work on more granular traits

prog on crud

* fmt

* format

* resource2 not really a benefit

* axum to 0.8

* bump aws deps

* just make it 1.17.0

* clean up cors

* the komodo env file should be highest priority over additional files

* add entities / message for test alerter

* test alert implementation

* rust 1.84.0

* axum update :param to {param} syntax

* fix last axum updates

* Add test alerter button

* higher quality / colored icons

* komodo-logo

* simplify network stats

* rename Test Alerter button

* escape incoming sync backslashes (BREAKING)

* clean up rust client websocket subscription

* finish oidc comment

* show update available stack table

* update available deployment table

* feature: use the repo path instead of name in GetLatestCommit (#282)

* Update repo path handling in commit fetching

- Changed `name` to `path` for repository identification.
- Updated cache update function to use the new path field.
- Improved error message for non-directory repo paths.

* feat: use optional name and path in GetLatestCommit

* review: don't use optional for name

* review: use helper

* review: remove redundant to_string()

* 1.17.0-dev

* feature: add post_deploy command (#288)

* feature: add post_deploy command

* review: do not run post_deploy if deploy failed

* feature: interpolate secrets in custom alerter (#289)

* feature: interpolate secrets in custom alerter

* fix rust warning

* review: sanitize errors

* review: sanitize error message

* Remove .git from remote_url (#299)

Remove .git from remote_url

Co-authored-by: Deon Marshall <dmarshall@ccp.com.au>

* mbecker20 -> moghtech

* remove example from cargo toml workspace

* dev-1

* fix login screen logo

* more legible favicon

* fix new compose images

* docs new organization

* typescript subscribe_to_update_websocket

* add donate button docsite

* add config save button in desktop sidebar navigator

* add save button to config bottom

* feature: allow docker image text to overflow in table (#301)

* feature: allow docker image text to overflow in table

* review: use break-words

* wip: revert line break in css file

* feature: update devcontainer node release

* improve First Login docs

* FIx PullStack re #302 and record docker compose config on stack deploy

* requery alerts more often

* improve update indicator style and also put on home screen

* Add all services stack log

* 1.17.0-dev-2

* fix api name chnage

* choose which stack services to include in logs

* feature: improve tables quick actions on mobile (#312)

* feature: improve tables quick actions on mobile

* review: fix gap4

* review: use flex-wrap

* improve pull to git init on existing folder without .git

* Fix unclear ComposePull log re #244

* use komodo_client.subscribe_to_update_websocket, and click indicator to reconnect

* dev-3

* ServerTemplate description

* improve WriteComposeContentsToHost instrument fields

* give server stat charts labels

* filters wrap

* show provider usernames from config file

* Stack: Fix git repo new compose file initialization

* init sync file new repo

* set branch on git init folder

* ResourceSync: pending view toggle between "Execute" vs "Commit" sync direction

* Improve resource sync Execute / Pending view selector

* standardize running commands with interpolation / output sanitizations

* fix all clippy lints

* fix rand

* lock certain users username / password, prevent demo creds from being changed.

* revert to login screen whenever the call to check login fails

* ResourceSync state resolution refinement

* make sure parent directories exist whenever writing files

* don't prune images if server not enabled

* update most deps

* update openidconnect dependency, and use reqwest rustls-tls-native-roots

* dev-4

* resource sync only add escaping on toml between the """

* Stacks executions take list of services -- Auto update only redeploys services with update

* auto update all service deploy option

* dev-5 fix the stack service executions

* clean up service_args

* rust 1.85

* store sync edits on localstorage

* stack edits on localstorage and show last deployed config

* add yarn install to runfile

* Fix actions when core on https

* add update_available query parameter to filter for only stacks /deployments with available update

* rust 2024 and fmt

* rename test.compose.yaml to dev.compose.yaml, and update runfile

* update .devcontainer / dev docs for updated runfile

* use png in topbar logo, svg quality sometimes bad

* OIDC: Support PKCE auth (secret optional)

* update docs on OIDC and client secret

* cycle the oidc client on interval to ensure up to date JWKs

* add KOMODO_LOCK_LOGIN_CREDENTIALS_FOR in config doc

* update deps

* resource sync toggle resource / variable / user group inclusion independantly

* use jsonwebtoken

* improve variable value table overflow

* colored tags

* fix sync summary count ok

* default new tag colors to grey

* soften tag opacity a bit

* Update config.tsx (#358)

* isolate stacks / deployments with pending updates

* update some deps

* use Tooltip component instead of HoverCard for mobile compatibility

* batch Build builds

* link to typescript client in the intro

* add link to main docs from client docs

* doc tweaks

* use moghtech/komodo-core and moghtech/komodo-periphery as images

* remove unnecessary explicit network

* periphery.compose.yaml

* clean up periphery compose

* add link to config

* update periphery container compose config

* rust 1.85.1

* update sync docs

* 1.17.0

---------

Co-authored-by: unsync <1211591+unsync@users.noreply.github.com>
Co-authored-by: Deon Marshall <dmarshall@ccp.com.au>
Co-authored-by: komodo <komodo@komo.do>
Co-authored-by: wlatic <jamesoh@gmail.com>
2025-03-23 16:47:06 -07:00
Maarten KossenandGitHub 9c841e5bdc Change amd64 to arm64 to prevent installing aarch64 binary on an x86_64 system. (#357) 2025-03-12 19:20:49 -07:00
mbecker20 e385c6e722 use ferretdb:1 2025-02-26 14:55:34 -08:00
Maxwell BeckerandGitHub 9ef25e7575 Create FUNDING.yml 2025-02-13 12:07:48 -08:00
boomamandGitHub f945a3014a Update index.mdx (#306)
Added small note on initial login steps.
2025-02-11 00:03:39 -08:00
mbecker20 fdad04d6cb fix KOMODO_DB_USERNAME compose files 2025-02-08 18:45:02 -08:00
mbecker20 c914f23aa8 update compose files re #180 2025-02-08 12:29:26 -08:00
Maarten KossenandGitHub 82b2e68cd3 Adding Resource Sync documentation. (#259) 2025-01-11 21:32:02 -08:00
e274d6f7c8 Network Usage - Ingress Egress per interface and global usage (#229)
* Add network io stats

Add network usage graph and current status

Change network graphs to use network interface from drop down menu

Adjust the type to be able to get general network stats for the general
UI view

Working setup with a working builder

remove changes to these dockerfile

remove lock changes

* change network hashmap to Vector

* adjust all the network_usage_interface to be a vector rather than a hash map

* PR requested changes applied

* Change net_ingress_bytes and egress to network_ingress_bytes egress respectively

* final gen-client types

---------

Co-authored-by: mbecker20 <becker.maxh@gmail.com>
2024-12-21 08:15:21 -08:00
Maxwell BeckerandGitHub ab8777460d Simplify periphery aio.Dockerfile 2024-12-14 09:13:01 -08:00
Maxwell BeckerandGitHub 7e030e702f Simplify aio.Dockerfile 2024-12-14 09:12:32 -08:00
Maxwell BeckerandGitHub a869a74002 Fix test.compose.yaml (use aio.Dockerfiles) 2024-12-14 09:11:24 -08:00
mbecker20 1d31110f8c fix multi arch built var reference 2024-12-02 03:33:11 -05:00
mbecker20 bb63892e10 periphery -> periphery-x86_64 setup script 2024-12-02 03:31:55 -05:00
mbecker20 4e554eb2a7 add labels to binary / frontend images 2024-12-02 03:02:00 -05:00
00968b6ea1 1.16.12 (#209)
* inc version

* Komodo interp in ui compose file

* fix auto update when image doesn't specify tag by defaulting to latest

* Pull image buttons don't need safety dialog

* WIP crosscompile

* rename

* entrypoint

* fix copy

* remove example/* from workspace

* add targets

* multiarch pkg config

* use specific COPY

* update deps

* multiarch build command

* pre compile deps

* cross compile

* enable-linger

* remove spammed log when server doesn't have docker

* add multiarch.Dockerfile

* fix casing

* fix tag

* try not let COPY fail

* try

* ARG TARGETPLATFORM

* use /app for consistency

* try

* delete cross-compile approach

* add multiarch core build

* multiarch Deno

* single arch multi arch

* typeshare cli note

* new typeshare

* remove note about aarch64 image

* test configs

* fix config file headers

* binaries dockerfile

* update cargo build

* docs

* simple

* just simple

* use -p

* add configurable binaries tag

* add multi-arch

* allow copy to fail

* fix binary paths

* frontend Dockerfiel

* use dedicated static frontend build

* auto retry getting instance state from aws

* retry 5 times

* cleanup

* simplify binary build

* try alpine and musl

* install alpine deps

* back to debian, try rustls

* move fully to rustls

* single arch builds using single binary image

* default IMAGE_TAG

* cleanup

* try caching deps

* single arch add frontend build

* rustls::crypto::ring::default_provider()

* back to simple

* comment dockerfile

* add select options prop, render checkboxes if present

* add allowSelectedIf to enable / disable rows where necessary

* rename allowSelectIf to isSelectable, allow false as global disable, disable checkboxes when not allowed

* rename isSelectable to disableRow (it works the oppsite way lol)

* selected resources hook, start deployment batch execute component

* add deployment group actions

* add deployment group actions

* add default (empty) group actions for other resources

* fix checkbox header styles

* explicitly check if disableRow is passed (this prop is cursed)

* don't disable row selection for deployments table

* don't need id for groupactions

* add group actions to resources page

* fix row checkbox (prop not cursed, i dumb)

* re-implement group action list using dropdown menu

* only make group actions clickable when at least one row selected

* add loading indicator

* gap betwen new resource and group actions

* refactor group actions

* remove "Batch" from action labels

* add group actions for relevant resources

* fix hardcode

* add selectOptions to relevant tables

* select by name not id

* expect selected to be names

* add note re selection state init for future reference

* multi select working nicely for all resources

* configure server health check timeout

* config message

* refresh processes remove dead processes

* simplify the build args

* default timeout seconds 3

---------

Co-authored-by: kv <karamvir.singh98@gmail.com>
2024-12-01 23:34:07 -08:00
mbecker20 a8050db5f6 1.16.11 bump version 2024-11-14 02:18:26 -05:00
Maxwell BeckerandGitHub bf0a972ec2 1.16.11 (#187)
* fix discord stack auto updated link

* action only log completion correctly

* add containers to omni search

* periphery build use --push

* use --password-stdin to login

* docker login stdin
2024-11-13 23:17:35 -08:00
mbecker20 23c1a08c87 fix Action success log being triggered even when there is error. 2024-11-12 19:43:55 -05:00
mbecker20 2b6b8a21ec revert monaco scroll past last line 2024-11-08 03:47:35 -05:00
mbecker20 02974b9adb monaco enable scroll beyond last line 2024-11-08 03:44:54 -05:00
Maxwell BeckerandGitHub 64d13666a9 1.16.10 (#178)
* send alert on auto update

* scrolling / capturing monaco editors

* deployed services has correct image

* serde default services for backward compat

* improve auto update config
2024-11-07 23:59:52 -08:00
mbecker20 2b2f354a3c add ImageUpdateAvailable filter to alert page 2024-11-05 01:30:55 -05:00
Maxwell BeckerandGitHub aea5441466 1.16.9 (#172)
* BatchDestroyDeployment

* periphery image pull api

* Add Pull apis

* Add PullStack / PullDeployment

* improve init deploy from container

* stacks + deployments update_available source

* Fix deploy / destroy stack service

* updates available indicator

* add poll for updates and auto update options

* use interval to handle waiting between resource refresh

* stack auto update deploy whole stack

* format

* clean up the docs

* update available alerts

* update alerting format

* fix most clippy
2024-11-04 20:28:31 -08:00
mbecker20 97ced3b2cb frontend allow Alerter configure StackStateChanged, include Stacks and Repos in whitelist 2024-11-02 21:00:38 -04:00
Maxwell BeckerandGitHub 1f79987c58 1.16.8 (#170)
* update configs

* bump to 1.16.8
2024-11-01 14:35:12 -07:00
Maxwell BeckerandGitHub e859a919c5 1.16.8 (#169)
* use this to extract from path

* Fix references to __ALL__
2024-11-01 14:33:41 -07:00
mbecker20 2a1270dd74 webhook check will return better status codex 2024-11-01 15:57:36 -04:00
Maxwell BeckerandGitHub f5a59b0333 1.16.7 (#167)
* 1.16.7

* increase builder max poll to allow User Data more time to setup periphery

* rework to KOMODO_OIDC_REDIRECT_HOST
2024-10-31 21:06:01 -07:00
mbecker20 cacea235f9 replace networks empty with network_mode, replace container: network mode 2024-10-30 02:58:27 -04:00
mbecker20 54ba31dca9 gen ts types 2024-10-30 02:18:57 -04:00
Maxwell BeckerandGitHub 17d7ecb419 1.16.6 (#163)
* remove instrument from validate_cancel_build

* use type safe AllResources map - Action not showing omnisearch

* Stack support replicated services

* server docker nested tables

* fix container networks which use network of another container

* bump version

* add 'address' to ServerListItemInfo

* secrets list on variables page wraps

* fix user data script

* update default template user data

* improve sidebar layout styling

* fix network names shown on containers

* improve stack service / container page

* deleted resource log records Toml backup for later reference

* align all the tables

* add Url Builder type
2024-10-29 23:17:10 -07:00
mbecker20 38f3448790 add Procedures and Actions page 2024-10-28 00:57:42 -04:00
Maxwell BeckerandGitHub ec88a6fa5a 1.16.5 (#159)
* repo pull lock

* implement BatchRunAction

* other batch methods
2024-10-27 20:56:56 -07:00
mbecker20 3820cd0ca2 make Build Organization configurable with custom value 2024-10-27 14:42:06 -04:00
mbecker20 419aa87bbb update resource toml examples to latest standard 2024-10-26 16:22:12 -04:00
Maxwell BeckerandGitHub 7a9ad42203 1.16.4 (#151)
* rust client improvements and docs

* sync rust client

* version 1.16.4

* UI support YAML / TOML utils, typed Deno namespace

* add ResourcesToml to typeshare

* add YAML and TOML convenience

* make the types available globally

* preload container with @std/yaml and @std/toml, clean up genned files

* add deno setup to alpine dockerfile
2024-10-26 12:15:34 -07:00
mbecker20 3f1cfa9064 update docs. Add Variables / Secrets docs 2024-10-25 00:02:12 -04:00
Maxwell BeckerandGitHub d05c81864e 1.16.3 (#150)
* refactor listener api implementation for Gitlab integration

* version 1.16.3

* builder delete id link cleanup

* refactor and add "__ALL__" branch to avoid branch filtering

* frontend config the webhook url

* action webhook config

* clean up webhook url copy

* add __ALL__ branch switch for Actions / Procedures
2024-10-24 16:03:00 -07:00
mbecker20 f1a09f34ab tweak dev docs and runfile 2024-10-22 17:04:49 -04:00
mbecker20 23c6e6306d fix usage of runnables-cli in dev docs 2024-10-22 16:36:25 -04:00
mbecker20 800da90561 tweaks to dev docs 2024-10-22 15:25:33 -04:00
mbecker20 b24bf6ed89 fix docsite broken links 2024-10-22 15:17:10 -04:00
Matt FoxxandGitHub d66a781a13 docs: Add development docs (#136)
* docs: Add development POC

* docs: Flesh out full build/run steps

* feat: Add mergeable compose file to expose port and internal periphery url

* feat: Add .devcontainer and VSCode Tasks for developing Komodo

* Make cargo cache persistent in devcontainer

* Add deno to devcontainer

* Update tasks to include TS client copy to frontend before run

* Recommend extensions for used dependencies in vscode workspace

All extensions recommended are included in the devcontainer. This makes it easier for users not using devcontainer to get lang support.

* Update local `run` sequence for development docs
2024-10-22 12:09:26 -07:00
Maxwell BeckerandGitHub f9b2994d44 1.16.2 (#145)
* Env vars written using same quotes (single vs double) as the user passes

* fmt

* trim start matches '-'

* ts client version
2024-10-22 11:41:17 -07:00
mbecker20 c0d6d96b64 get username works for service users 2024-10-22 03:36:20 -04:00
mbecker20 34496b948a bump ts client to 1.16.1 2024-10-22 02:58:42 -04:00
mbecker20 90c6adf923 fix periphery installer force file recreation command 2024-10-22 02:55:39 -04:00
mbecker20 3b72dc65cc remove "Overviews" label from sidebar 2024-10-22 02:27:22 -04:00
mbecker20 05f38d02be bump version to 1.16.1 2024-10-22 02:21:16 -04:00
Maxwell BeckerandGitHub ea5506c202 1.16.1 (#143)
* ensure sync state cache is refreshed on sync create / copy

* clean up resources post_create

* show sidebar if element length > 1

* update `run_komodo_command` command

* rename all resources

* refresh repo cache after clone / pull

* improve rename repo log
2024-10-21 23:19:40 -07:00
mbecker20 64b0a5c9d2 delete unrelated caddy compose 2024-10-21 00:30:54 -04:00
mbecker20 93cc6a3a6e Add running Action to dashboard "Active" 2024-10-21 00:21:17 -04:00
mbecker20 7ae69cf33b ignore top level return linting 2024-10-20 05:10:28 -04:00
mbecker20 404e00cc64 move action info inline 2024-10-20 04:43:29 -04:00
mbecker20 6fe5bc7420 properly host client lib for deno importing (types working) 2024-10-20 03:17:58 -04:00
mbecker20 82324b00ee typescript komodo_client v 1.16.0 2024-10-20 02:35:43 -04:00
Maxwell BeckerandGitHub 5daba3a557 1.16.0 (#140)
* consolidate deserializers

* key value list doc

* use string list deserializers for all entity Vec<String>

* add additional env files support

* plumbing for Action resource

* js client readme indentation

* regen lock

* add action UI

* action backend

* start on action frontend

* update lock

* get up to speed

* get action started

* clean up default action file

* seems to work

* toml export include action

* action works

* action works part 2

* bump rust version to 1.82.0

* copy deno bin from bin image

* action use local dir

* update not having changes doesn't return error

* format with prettier

* support yaml formatting with prettier

* variable no change is Ok
2024-10-19 23:27:28 -07:00
mbecker20 020cdc06fd remove migrator link in readme 2024-10-18 21:23:02 -04:00
Maxwell BeckerandGitHub cb270f4dff 1.15.12 (#139)
* add containers link to mobile dropdown

* fix update / alert not showing permission issue

* prevent disk alert back and forth

* improve user group pending toml
2024-10-18 17:14:22 -07:00
Matt FoxxandGitHub 21666cf9b3 feat: Add docs link to topbar (#134) 2024-10-18 16:10:01 -07:00
mbecker20 a417926690 1.15.11 allow adding stack to user group 2024-10-16 23:09:06 -04:00
mbecker20 293b36fae4 Allow adding Stack to User Group 2024-10-16 23:08:44 -04:00
mbecker20 dca37e9ba8 1.15.10 connect with http using DOCKER_HOST 2024-10-16 22:16:07 -04:00
Morgan WyattandGitHub 1cc302fcbf Update docker.rs to allow http docker socket connection (#131)
* Update docker.rs to allow http docker socket connection

Add or_else to allow attempt to connect to docker socket proxy via http if local connection fails

* Update docker.rs

Change two part connection to use connect_with_defaults instead, per review on PR.
2024-10-16 19:13:19 -07:00
mbecker20 febcf739d0 Remove Comma from installer: thanks @PiotrBzdrega 2024-10-16 10:43:54 -04:00
mbecker20 cb79e00794 update systemd service file 2024-10-15 17:35:54 -04:00
mbecker20 869b397596 force service file recreation docs 2024-10-15 17:25:29 -04:00
Maxwell BeckerandGitHub 41d1ff9760 1.15.9 (#127)
* add close alert threshold to prevent Ok - Warning back and forth

* remove part about repo being deleted, no longer behavior

* resource sync share general common

* remove this changelog. use releases

* remove changelog from readme

* write commit file clean up path

* docs: supports any git provider repo

* fix docs: authorization

* multiline command supports escaped newlines

* move webhook to build config advanced

* parser comments with escaped newline

* improve parser

* save use Enter. escape monaco using escape

* improve logic when deployment / stack action buttons shown

* used_mem = total - available

* Fix unrecognized path have 404

* webhooks will 404 if misconfigured

* move update logger / alerter

* delete migrator

* update examples

* publish typescript client komodo_client
2024-10-14 23:04:49 -07:00
mbecker20 dfafadf57b demo / build username pw 2024-10-14 11:49:44 -04:00
mbecker20 538a79b8b5 fix upausing all container action state 2024-10-13 18:11:09 -04:00
Maxwell BeckerandGitHub 5088dc5c3c 1.15.8 (#124)
* fix all containers restart and unpause

* add CommitSync to Procedure

* validate resource query tags causes failure on non exist

* files on host init working. match tags fail if tag doesnt exist

* intelligent sync match tag selector

* fix linting

* Wait for user initialize file on host
2024-10-13 15:03:16 -07:00
mbecker20 581d7e0b2c fix Procedure sync log 2024-10-13 04:21:03 -04:00
mbecker20 657298041f remove unneeded syncs volume 2024-10-13 04:03:09 -04:00
mbecker20 d71e9dca11 fix version 2024-10-13 03:21:56 -04:00
Maxwell BeckerandGitHub 165131bdf8 1.15.7 (#119)
* 1.15.7-dev ensure git config set

* add username to commit msg
2024-10-13 00:01:14 -07:00
mbecker20 0a81d2a0d0 add labels to mongo compose 2024-10-13 00:57:13 -04:00
Maxwell BeckerandGitHub 44ab5eb804 1.15.6 (#117)
* add periphery.skip label, skip in StopAllContainers

* add core config sync directory

* deploy stack if changed

* fix stack env_file_path when git repo and using run_directory

* deploy stack if changed

* write sync contents

* commit to git based sync, managed git based sync

* can sync non UI defined resource syncs

* sync UI control

* clippy

* init new stack compose file in repo

* better error message when attached Server / Builder invalid

* specify multiple resource file paths (mixed files + folders)

* use react charts

* tweak stats charts

* add Containers page

* 1.15.6

* stack deploy check if deployes vs remote has changed

* improve ux with loading indicators

* sync diff accounts for deploy / after

* fix new chart time axes
2024-10-12 21:42:46 -07:00
Maxwell BeckerandGitHub e3d8e603ec 1.15.5 (#116)
* 1.15.5
- Update your user's username and password
- **Admin**: Delete Users

* update username / password / delete user backend

* bump version

* alerter default disabled

* delete users and update username / password

* set password "" after update
2024-10-11 19:42:43 -07:00
mbecker20 8b5c179473 account recover note 2024-10-11 19:16:01 -04:00
mbecker20 8582bc92da fix Destroy Before Deploy config 2024-10-10 04:17:17 -04:00
Maxwell BeckerandGitHub 8ee270d045 1.15.4 (#114)
* stack destroy before deploy option

* add timestamps. Fix log polling even when poll not selected

* Add build [[$VERSION]] support. VERSION build arg default

* fix clippy lint

* initialize `first_builder`

* run_komodo_command uses parse_multiline_command

* comment UI for $VERSION and new command feature

* bump some deps

* support multiline commands in pre_deploy / pre_build
2024-10-10 00:37:23 -07:00
Maxwell BeckerandGitHub 2cfae525e9 1.15.3 (#109)
* fix parser support single quote '

* add stack reclone toggle

* git clone with token uses token:<TOKEN> for gitlab compatability

* support stack pre deploy shell command

* rename compose down update log stage

* deployment configure registry login account

* local testing setup

* bump version to 1.15.3

* new resources auto assign server if only one

* better error log when try to create resource with duplicate name

* end description with .

* ConfirmUpdate multi language

* fix compose write to host logic

* improve instrumentation

* improve update diff when small array

improve 2

* fix compose env file passing when repo_dir is not absolute
2024-10-08 23:07:38 -07:00
mbecker20 80e5d2a972 frontend dev setup guide 2024-10-08 16:55:24 -04:00
mbecker20 6f22c011a6 builder / server template add correct additional line if empty params 2024-10-07 22:55:48 -04:00
mbecker20 401cccee79 config nav buttons secondary 2024-10-07 21:55:14 -04:00
mbecker20 654b923f98 fix broken link to periphery setup 2024-10-07 18:56:14 -04:00
mbecker20 61261be70f update docs, split connecting servers out of Core Setup 2024-10-07 18:54:00 -04:00
mbecker20 46418125e3 update docs for periphery systemd --user install 2024-10-07 18:53:43 -04:00
mbecker20 e029e94f0d 1.15.2 Pass KOMODO_OIDC_ADDITIONAL_AUDIENCES 2024-10-07 15:44:51 -04:00
mbecker20 3be2b5163b 1.15.1 do not add trailing slash OIDC provider 2024-10-07 13:23:40 -04:00
mbecker20 6a145f58ff pass provider as-is. Authentik users should add a trailing slash 2024-10-07 13:16:25 -04:00
mbecker20 f1cede2ebd update dark / light stack screenshot to have action buttons 2024-10-07 08:05:39 -04:00
mbecker20 a5cfa1d412 update screenshots 2024-10-07 07:30:18 -04:00
mbecker20 a0674654c1 update screenshots 2024-10-07 07:30:11 -04:00
mbecker20 3faa1c58c1 update screenshots 2024-10-07 07:30:05 -04:00
mbecker20 7e296f34af screenshots 2024-10-07 07:29:58 -04:00
mbecker20 9f8ced190c update screenshots 2024-10-07 07:29:02 -04:00
mbecker20 c194bb16d8 update screenshots 2024-10-07 07:28:45 -04:00
mbecker20 39fec9b55e update screenshots 2024-10-07 07:27:52 -04:00
mbecker20 e97ed9888d update screenshots 1 2024-10-07 07:27:16 -04:00
mbecker20 559102ffe3 update readme 2024-10-07 07:25:36 -04:00
mbecker20 6bf80ddcc7 update screenshots readme 2024-10-07 07:25:24 -04:00
mbecker20 89dbe1b4d9 stack file_contents editor respects readOnly / disabled 2024-10-07 06:58:00 -04:00
mbecker20 334e16d646 OIDC use preferred username 2024-10-07 06:35:46 -04:00
mbecker20 a7bbe519f4 add build server link 2024-10-07 06:15:53 -04:00
mbecker20 5827486c5a add redirect uri for OIDC 2024-10-07 06:15:00 -04:00
mbecker20 8ca8f7eddd add context to oidc init error 2024-10-07 06:10:12 -04:00
mbecker20 0600276b43 fix parse KOMODO_MONGO_ in envs 2024-10-07 05:43:09 -04:00
mbecker20 a77a1495c7 active resources mb-12 not always there 2024-10-07 05:14:54 -04:00
mbecker20 021ed5d15f ActiveResources margin bottom 2024-10-07 03:24:57 -04:00
7d4376f426 1.15.0 (#90)
* attach env_file to compose build and compose pull stages

* fmt and bump rust version

* bump dependencies

* ignored for Sqlite message

* fix Build secret args info

* improve secret arguments info

* improve environment, ports, volumes deserializers

* rename `mongo` to `database` in config

* support _FILE in secret env vars

* improve setup - simpler compose

* remove aws ecr container registry support, alpine dockerfiles

* log periphery config

* ssl_enabled mode

* log http vs https

* periphery client accept untrust ssl certs

* fix nav issue from links

* configurable ssl

* KOMODO_ENSURE_SERVER -> KOMODO_FIRST_SERVER

* mount proc and ssl volume

* managed sync

* validate files on host resource path

* remove sync repo not configured guards

* disable confirm dialog

* fix sync hash / message Option

* try dev dockerfile

* refresh sync resources after commit

* socket invalidate handling

* delete dev dockerfile

* Commit Changes

* Add Info tab to syncs

* fix new Info parsing issue with serde default

* refresh stack cache on create / update

* managed syncs can't sync themselves

* managed syncs seems to work

* bump thiserror

* use alpine as main dockerfile

* apt add --no-cache

* disable user write perms, super admin perms to manage admins

* manage admin user UI

* implement disable non admin create frontend

* disable create non admin

* Copy button shown based on permission

* warning message on managed sync

* implement monaco editor

* impl simple match tags config

* resource sync support match tags

* more match tag filtering

* improve config with better saving diffs

* export button use monaco

* deser Conversions with wrapping strings

* envs editing

* don't delete variables / user groups if match tags defined

* env from_str improve

* improve dashboards

* remove core ca stuff for now

* move periphery ssl gen to dedicated file

* default server address periphery:8120

* clean up ssl configs

* server dashboard

* nice test compose

* add discord alerter

* discord alerter

* stack hideInfo logic

* compose setup

* alert table

* improve config hover card style

* update min editor height and stack config

* Feat: Styling Updates (#94)

* sidebar takes full screen height

* add bg accent to navbar

* add aschild prop to topbar alerts trigger

* stylize resource rows

* internally scrollable data tables

* better hover color for outlined button

* always show scrollbar to prevent layout shift

* better hover color for navbar

* rearrange buttons

* fix table and resource row styles

* cleanup scrollbar css

* use page for dashboard instead of section

* fix padding

* resource sync refactor and env keep comments

* frontend build

* improve configs

* config nice

* Feat/UI (#95)

* stylize resource rows

* internally scrollable data tables

* fix table and resource row styles

* use page for dashboard instead of section

* fix padding

* add `ResourcePageHeader` to required components

* add generic resource page header component

* add resource page headers for all components

* add resource notificaitons component

* add `TextUpdateMenu2` for use in resource page

* cleanup resource notificaitons

* update resource page layout

* ui edits

* sync kind of work

* clean up unused import

* syncs seem to work

* new sync pending

* monaco diff hide unchanged regions

* update styling all in config  resource select links

* confirm update default strings

* move procedure Add Stage to left

* update colors / styles

* frontend build

* backend for write file contents to host

* compose reference ports comment out

* server config

* ensure parent directory created

* fix frontend build

* remove default stack run_directory

* fix periphery compose deploy response set

* update compose files

* move server stats under tabs

* fix deployment list item getting correct image when not deployed

* stack updates cache after file write

* edit files on host

* clean up unused imports

* top level config update assignment must be spread

* update deps, move alert module

* move stack module

* move sync module

* move to sync db_client usage after init

* support generic OIDC provider

* init builders / server templates specifying https

* special cases for server / deployment state

* improve alert details

* add builder template `use_https` config

* try downgrade aws sdk ec2 for x86 build

* update debian dockerfiles to rm lists/*

* optionally configure seperate KOMODO_OIDC_REDIRECT

* add defaults to compose.env

* keep tags / search right aligned when view only

* clean up configs

* remove unused migrator deps

* update roadmap support generic OIDC

* initialize sync use confirm button

* key_value syntax highlighting

* smaller debian dockerfiles

* clean up deps.sh

* debian dockerifle

* New config layout (#96)

* new config layout

* fix image config layout and components config

* fix dom nesting and cleanup components

* fix label, make switches flex row

* ensure smooth scroll on hash navigations

* width 180 on config sidebar

* slight edits to config

* log whether https builder

* DISABLED <switch> ENABLED

* fix some more config

* smaller checked component

* server config looking good

* auto initialize compose files when files on host

* stack files on host good

* stack config nice

* remove old config

* deployments looking good

* build looking good

* Repo good

* nice config for builders

* alerter good

* server template config

* syncs good

* tweak stack config

* use status badge for update tables

* unified update page using router params

* replace /updates with unified updates page

* redirect all resource updates to unified update page

* fix reset handling

* unmount legacy page

* try periphery rustls

* rm unused import

* fix broken deps

* add unified alerts apge

* mount new alerts, remove old alerts page

* reroute resource alerts to unified alerts page

* back to periphery openssl

* ssl_enabled defaults to false for backward compat

* reqwest need json feature

* back to og yaml monaco

* Uncomment config fields for clearer config

* clean up compose env

* implement pull or clone, avoid deleting repo directory

* refactor mongo configuration params

* all configs respect empty string null

* add back status to header

* build toml don't have version if not auto incrementing

* fix comile

* fix repo pull cd to correct dir

* fix core pull_or_clone directory

* improve statuses

* remove ' ' from kv list parser

* longer CSRF valid for, to give time to login / accept

* don't compute diff / execute if there are any file_errors

* PartialBuilderConfig enum user inner option

* move errors to top

* fix toml init serializer

* server template and bulder manually add config.params line

* better way to check builder / template params empty

* improve build configs

* merge links into network area deployment

* default periphery config

* improve SystemCommand editor

* better Repo server / builder Info

* improve Alerts / Updates with ResourceSelector

* fix unused frontend

* update ResourceSync description

* toml use [resource.config] syntax

* update toml syntax

* update Build.image_registry schema

* fix repo / stack resource link alias

* reorder image registry

* align toml / yaml parser style

* some config updates

---------

Co-authored-by: Karamvir Singh <67458484+karamvirsingh98@users.noreply.github.com>
Co-authored-by: kv <karamvir.singh98@gmail.com>
2024-10-06 23:54:23 -07:00
Brad LugoandGitHub 7e9b406a34 fix: change edit url for docsite (#91)
Changes the default edit url provided by the docusaurus template to the
correct komodo url.
2024-09-22 23:08:34 -07:00
Brad LugoandGitHub dcf78b05b3 fix: check if systemd is available for install (#89)
Adds a check at the beginning of setup-periphery.py to verify if
`systemctl` is executable by the current user and if systemd is the
init system in use. These changes will inform the user we've decided
systemd is unavailable and exits before we attempt to use any systemd
functionality, but modify this logic to configure other init systems in
the future.

Relates to (but doesn't close)
https://github.com/mbecker20/komodo/issues/66.
2024-09-22 19:34:56 -07:00
3236302d05 Reduce periphery image size (#82)
* Reduce periphery image size

* rename new alpine Dockerfile as slim.Dockerfile

* bump slim dockerfile rust version

---------

Co-authored-by: mbecker20 <becker.maxh@gmail.com>
2024-09-21 14:57:51 -07:00
mbecker20 fc41258d6c fix docs deploy command --env-file 2024-09-13 12:12:01 +03:00
mbecker20 ae8df90361 uncomment compose envs set by variables for .env edit only 2024-09-12 11:11:28 +03:00
mbecker20 7d05b2677f explicit yaml 2024-09-12 00:52:35 +03:00
mbecker20 2f55468a4c simple docs 2024-09-11 23:13:42 +03:00
mbecker20 a20bd2c23f docker compose doc 2024-09-11 23:08:56 +03:00
mbecker20 b3aa0ffa78 remove unnecessary docs 2024-09-11 22:47:13 +03:00
mbecker20 8e58a283cd fix caddy compose 2024-09-11 22:07:06 +03:00
mbecker20 9b2d9932ef add prune buildx 2024-09-11 21:18:56 +03:00
mbecker20 7cb093ade1 fix links 2 2024-09-11 21:04:48 +03:00
mbecker20 e2f73d8474 fix broken doc links 2024-09-11 21:01:46 +03:00
Maxwell BeckerandGitHub 12abd5a5bd 1.14.2 (#70)
* docker builders / buildx prune backend

* seems to work with ferret

* improve UI error messages

* compose files

* update compose variables comment

* update compose files

* update sqlite compose

* env vars and others support end of line comment starting with " #"

* aws and hetzner default user data for hands free setup

* move configs

* new core config

* smth

* implement disable user registration

* clean up compose files

* add DISABLE_USER_REGISTRATION

* 1.14.2

* final
2024-09-11 10:50:59 -07:00
Maxwell BeckerandGitHub f349cdf50d 1.14.1 (#69)
* 1.14.1

* 1.14.1 version

* repo pull use configured repo path

* don't show UI defined file if using Stack files on host mode

* Stack "run build" option

* note on bind mounts

* improve bind mount doc

* add links to schema

* add new stacks configs UI

* interp into stack build_extra_args

* add links UI
2024-09-10 08:17:53 -07:00
mbecker20 796bcac952 no business edition docs 2024-09-07 18:50:18 +03:00
mbecker20 fed05684aa no business edition 2024-09-07 18:48:58 +03:00
mbecker20 80a91584a8 version number link to releases 2024-09-07 12:54:54 +03:00
mbecker20 12d05e9a25 1.14.0 stable 2024-09-07 12:51:56 +03:00
mbecker20 f4d06c91ff add 5s log polling option 2024-09-07 12:42:35 +03:00
mbecker20 5d7449529f fix Builder schema link 2024-09-05 01:40:54 +03:00
mbecker20 a0021d1785 obfuscate secret variable value with * 2024-09-04 17:15:59 +03:00
mbecker20 bbd23e3f5f improve login failure feedback 2024-09-04 17:15:47 +03:00
mbecker20 71841a8e41 update komodo CLI readme 2024-09-04 16:48:27 +03:00
mbecker20 5228ffd9b8 fix changelog 2024-09-02 12:54:56 +03:00
mbecker20 a06f506e54 installer log 2024-09-02 03:13:58 +03:00
mbecker20 71d6a55e50 modified installer 2024-09-02 03:12:17 +03:00
mbecker20 d16c03dd2a fix force service file install 2024-09-02 03:09:14 +03:00
mbecker20 6abd9a6554 publish rc1 crates 2024-09-02 02:06:02 +03:00
mbecker20 5f04e881a5 fix doc link 2024-09-02 01:45:39 +03:00
Maxwell BeckerandGitHub 5fc0a87dea 1.14 - Rename to Komodo - Docker Management (#56)
* setup network page

* add Network, Image, Container

* Docker ListItems and Inspects

* frontend build

* dev0

* network info working

* fix cargo lock

* dev1

* pages for the things

* implement Active in dashboard

* RunBuild update trigger list refresh

* rename deployment executions to StartDeployment etc

* add server level container control

* dev2

* add Config field to Image

* can get image labels from Config.Labels

* mount container page

* server show resource count

* add GetContainerLog api

* add _AllContainers api

* dev3

* move ResourceTarget to entities mod

* GetResourceMatchingContainer api

* connect container to resource

* dev4 add volume names to container list items

* ts types

* volume / image / network unused management

* add image history to image page

* fix PruneContainers incorret Operation

* update cache for server for server after server actions

* dev5

* add singapore to Hetzner

* implement delete single network / image / volume api

* dev6

* include "in use" on Docker Lists

* add docker resource delete buttons

* is nice

* fix volume all in use

* remove google font dependency

* use host networking in test compose

* implement Secret Variables (hidden in logs)

* remove unneeded borrow

* interpolate variables / secrets into extra args / onclone / onpull / command etc

* validate empty strings before SelectItem

* rename everything to Komodo

* rename workspace to komodo

* rc1
2024-09-01 15:38:40 -07:00
mbecker20 2463ed3879 1.13.4 Fix periphery image registry login / pull ordering 2024-08-20 12:50:07 -04:00
mbecker20 a2758ce6f4 Stack: login to registry BEFORE pulling image 2024-08-20 12:49:19 -04:00
mbecker20 3f1788dbbb docsite: reindent ports in example 2024-08-19 11:36:17 -04:00
mbecker20 33a0560af6 frontend: Ignore Services correct content hidden logic 2024-08-19 00:44:48 -04:00
mbecker20 610a10c488 frontend: show state when using Stack files-on-host 2024-08-18 21:16:53 -04:00
mbecker20 39b217687d 1.13.3 filter Periphery disks 2024-08-18 18:12:47 -04:00
mbecker20 2f73461979 stack don't show Git Repo config is file contents defined in UI 2024-08-18 18:06:12 -04:00
mbecker20 aae9bb9e51 move image registry to the top of Build Image config 2024-08-18 18:06:12 -04:00
mbecker20 7d011d93fa Fix: Periphery should flter out "overlay" volumes, not include them 2024-08-18 18:05:56 -04:00
mbecker20 bffdea4357 Swarm roadmap 2024-08-18 16:05:58 -04:00
mbecker20 790566bf79 add note about podman support 2024-08-18 13:37:26 -04:00
mbecker20 b17db93f13 quick-fix: fix build version config 2024-08-18 04:57:25 -04:00
mbecker20 daa2ea9361 better build version management 2024-08-18 04:24:22 -04:00
mbecker20 176fb04707 add docs about running periphery in contianer 2024-08-18 04:04:03 -04:00
mbecker20 5ba1254cdb add docker compose docs 2024-08-18 03:30:53 -04:00
Maxwell BeckerandGitHub 43593162b0 1.13.2 local compose (#36)
* stack config files_on_host

* refresh stack cache not blocked when using files_on_host

* add remote errors status

* improve info tab

* store the full path in ComposeContents
2024-08-18 00:04:47 -07:00
Maxwell BeckerandGitHub 418f359492 1.13.2 (#35)
* 1.13.2 add periphery disk report whitelist / blacklist

* improve setup docs

* publish 1.13.2 client
2024-08-17 15:28:01 -07:00
mbecker20 3cded60166 close any open alerts on non-existant disk mounts 2024-08-17 18:04:11 -04:00
mbecker20 6f70f9acb0 no need to try to parse deploy stuff, only can cause failure 2024-08-17 17:38:14 -04:00
mbecker20 6e1064e58e auto enable ensured server 2024-08-17 14:28:38 -04:00
mbecker20 d96e5b4c46 comment out environment so parsing doesn't fail 2024-08-17 14:26:10 -04:00
mbecker20 5a8822c7d2 add note about arm periphery 2024-08-17 14:23:21 -04:00
Maxwell BeckerandGitHub 1f2d236228 Dockerized periphery (#34)
* Add webhooks page to docs

* supports

* supports

* periphery Dockerfile

* add comments. Remove unneeded default config

* add FILE SYSTEM log

* remove log

* filter disks included in periphery disk report, on periphery side

* dockerized periphery

* all in one compose file docs

* remove some unused deps
2024-08-17 00:25:42 -07:00
mbecker20 a89bd4a36d deleting ResourceSync cleans up open alerts
use .then in alert cleanup
2024-08-16 12:27:50 -04:00
mbecker20 0b40dff72b add images, volumes to 1.14 roadmap 2024-08-16 11:54:24 -04:00
mbecker20 59874f0a92 temp downgrade tower due to build issue 2024-08-16 02:35:23 -04:00
mbecker20 14e459b32e debug on RefreshCache tasks 2024-08-16 02:08:30 -04:00
mbecker20 f6c55b7be1 default log config include opentelemetry service name 2024-08-16 02:05:48 -04:00
mbecker20 460819a145 hetzner pass enable ipv4/v6 explicitly 2024-08-16 01:42:28 -04:00
mbecker20 91f4df8ac2 update logging deps 2024-08-16 01:15:53 -04:00
mbecker20 6a19e18539 pass disabled to stack TextInput area 2024-08-15 04:17:15 -04:00
mbecker20 30c5fa3569 add gap to commit hover 2024-08-15 03:56:03 -04:00
mbecker20 4b6aa1d73d stack services use new StateBadge 2024-08-15 03:32:30 -04:00
mbecker20 5dfd007580 fmt 2024-08-15 03:24:52 -04:00
mbecker20 955670d979 improve Stack ingore_services info tip 2024-08-15 03:24:49 -04:00
mbecker20 f70e359f14 avoid warn log on refresh repo task if no repo configured 2024-08-15 03:24:27 -04:00
mbecker20 a2b0981f76 filter out any disks with mount path at /var/lib/docker/volumes. Filter out user defined ones on server 2024-08-15 02:36:53 -04:00
mbecker20 49a8e581bf move Stack post_create stuff into trait for reusability 2024-08-15 02:32:38 -04:00
mbecker20 2d0c1724db fix too many recent cards 2024-08-12 18:38:44 -07:00
mbecker20 20ae1c22d7 config example links correctly 2024-08-12 15:03:02 -07:00
mbecker20 e8d75b2a3d improve docsite resource page 2024-08-12 14:59:10 -07:00
mbecker20 e23d68f86a update logs will convert ansi colors to html 2024-08-12 13:59:56 -07:00
mbecker20 2111976450 Join the Discord 2024-08-12 02:10:19 -07:00
mbecker20 8a0109522b fix remove recents on delete 2024-08-12 00:33:08 -07:00
mbecker20 8d75fa3f2f provide custom webhook secret to all resources which take webhooks 2024-08-11 22:05:26 -07:00
mbecker20 197e938346 stack ignore_services config hidden 2024-08-11 20:18:28 -07:00
mbecker20 6ba0184551 add ignore_services to stack 2024-08-11 20:00:20 -07:00
mbecker20 c456b67018 ListStackServices refetch interval 2024-08-11 19:28:05 -07:00
mbecker20 02e152af4d clean up config struct 2024-08-11 19:16:44 -07:00
mbecker20 392e691f92 add repo build webhook 2024-08-11 18:26:51 -07:00
mbecker20 495e208ccd add building in repo busy check 2024-08-11 17:47:10 -07:00
mbecker20 14474adb90 add building state to repo 2024-08-11 17:46:26 -07:00
mbecker20 896784e2e3 fix repo action UI responsiveness 2024-08-11 17:38:15 -07:00
mbecker20 2e690bce24 repo table just show repo and branch 2024-08-11 17:36:00 -07:00
mbecker20 7172d24512 add message if fail to remove_dir_all after compose deploy 2024-08-11 17:21:19 -07:00
mbecker20 b754c89118 validate config makes sure ids not empty 2024-08-11 17:09:53 -07:00
Maxwell BeckerandGitHub 31a23dfe2d v1.13.1 improve stack edge cases, and UI action responsiveness (#26)
* get stack state from project

* move custom image name / tag below image setting for build config

* services also trigger stack action state

* add status to stack page

* 1.13.1 patch
2024-08-11 17:01:09 -07:00
mbecker20 b0f80cafc3 improve action responsiveness by improving when update is sent out rel to action state set 2024-08-11 14:59:34 -07:00
mbecker20 85a16f6c6f ensure run directory is normalized before create dir all 2024-08-11 14:14:17 -07:00
mbecker20 29a7e4c27b add link to builder in build info 2024-08-11 13:24:29 -07:00
mbecker20 a73b572725 improve dashboard responsiveness 2024-08-11 12:07:14 -07:00
mbecker20 aa44bf04e8 validate repo builder id in diff (new field) 2024-08-11 05:06:17 -07:00
mbecker20 93348621c5 replace repo builder_id with name for toml export 2024-08-11 05:00:34 -07:00
mbecker20 4b2139ede2 docker compose ls --all 2024-08-11 04:56:28 -07:00
mbecker20 3251216be7 update server address config placeholder 2024-08-11 03:35:34 -07:00
mbecker20 1f980a45e8 fix compose example file to reference monitor-mongo 2024-08-11 03:34:19 -07:00
mbecker20 94da1dce99 fill out Procedure execute types 2024-08-11 02:38:15 -07:00
mbecker20 d4fc015494 cli don't panic of no HOME env var 2024-08-11 02:26:18 -07:00
mbecker20 5800fc91d2 repo don't show build button if builder not attached 2024-08-11 02:12:39 -07:00
mbecker20 91785e1e8f monitor_cli install instructions 2024-08-11 01:56:56 -07:00
mbecker20 41fccdb16e demo link in readme 2024-08-10 23:58:42 -07:00
mbecker20 78cf93da8a improve dashboard recents responsiveness 2024-08-10 23:52:24 -07:00
mbecker20 ea36549dbe fix stack service routing page - works with updates 2024-08-10 23:01:31 -07:00
mbecker20 a319095869 improve readme 2024-08-10 16:02:29 -07:00
mbecker20 a6d7a80cbc capitalize Monitor Docs 2024-08-10 15:33:17 -07:00
mbecker20 20f051c890 readme 2024-08-10 15:32:22 -07:00
mbecker20 2fef954ad5 add link to demo docs 2024-08-10 15:30:54 -07:00
mbecker20 e1b9367ee3 remove attempt at parsing json out of config 2024-08-10 14:27:58 -07:00
mbecker20 c7717fbfdf disable create variable for non admin 2024-08-10 13:59:42 -07:00
mbecker20 bf918042c3 point to right mongo 2024-08-10 13:33:09 -07:00
mbecker20 46ac16100d fix example compose "depends on" 2024-08-10 12:55:31 -07:00
mbecker20 eca0378c56 apply spellcheck={false} 2024-08-10 12:50:21 -07:00
mbecker20 bfd5c5390d fix use before init loop 2024-08-10 12:18:07 -07:00
mbecker20 db41878278 guard against running on_clone / on_pull on core 2024-08-10 11:56:18 -07:00
mbecker20 26468ed8ea add infos for stack repo branch commit 2024-08-10 11:49:23 -07:00
mbecker20 707751708d update to latest rust docker base 2024-08-10 11:31:52 -07:00
mbecker20 d28d3422a3 disable server builder cancel in UI 2024-08-10 11:04:51 -07:00
mbecker20 9e2b1ede93 tweak layout: items-center 2024-08-10 10:22:03 -07:00
mbecker20 37e37deb04 clarify what "sync resources" means 2024-08-10 09:42:42 -07:00
mbecker20 e73a6ca72c fix docsite link error 2024-08-10 09:39:54 -07:00
mbecker20 6082b7b1bd update client version in toml 2024-08-10 09:35:20 -07:00
678767c24b [v1.13 - Komodo] Docker compose support with the Stack resource (#24) Co-authored with @karamvirsingh98
* add some network stuff to container summary

* improve settings tables UI

* periphery build supports additional tags

* fix variable container sizing

* alert types newline wrap

* plumbing for Stack resource

* plumbing for Stack resource

* mount stack api

* stack resource sync

* get remote compose file

* support image_name and image_tag

* add server config placeholders. default server config address

* configure image name and image tag

* deployment work with build image_name and image_tag

* stack UI

* fe builds

* configure registry provider and account

* implement periphery stack api

* stack poll interval

* add UI provider management

* deploy stacks

* build push commit hash tag.

* Destroy stack

* update default core port to 9120

* remove git_account alias

* finish stack (and container) api

* frontend builds

* cant cancel server based builds

* fix

* use git pull -f

* 9120

* start UI updates (#15)

* fix  From<Stack> for CloneArgs

* remove unused imports

* UI Updates (#16)

* cleanup dashboard charts for resources

* bring back solid scrollbars

* enable sidebar scrolling

* remove alerts from all resources

* pass jwt secret

* stacks dont delete the target

* parse services from yaml

* stacks deploy

* close

* looking good

* closer

* destroy stack when file missing. onboard stacks

* figure out stack container name matching

* get stack state correct

* work with service views

* UI Updates - Sidebar, Topbar Alerts, and All Resources page (#17)

* move sidebar to use fixed positioning instead of sticky

* add alert details dialog to topbar alerts

* cleanup all resources page layout

* ensure resource links don't propagate clicks

* periphery support passing env with --env-file

* StackServicePage

* default run_directory to ./ for clarify

* add stack webhook listeners

* add default compose name of stack name

* stacks controlled with project name

* migrate to dotenvy

* add stack to dashboard

* remove deploying / destroying stack services

* update config files

* fix getting service logs

* git / docker provider management api

* implement passing git / registry token from db

* rename system user Github to Git Webhook

* seperate deployed and latest services on stack info

* add stack service level operations

* UI Updates - Update Shadcn/UI components, prevent navbar menu layout shift (#20)

* add dashboard pie for resource syncs

* dashboard items same height

* update shadcn components

* ensure centered following sheet update

* cleanup layout, prevent navbar menu layout shifts

* add manual filter, fix toast call

* guard webhooks

* remove deployed_message, latest_message from StackListItemInfo

* stop all containers on server correctly

* support multiple compose files

* cache all containers networks images projects

* remove project missing from db cache

* work on sync deploy stuff

* rework deployment sync deploy to support stacks. they can depend on each other.

* UI Updates - Remove topbar transparency, pretty status badges, tidy resource page layout with a 'back' button (#21)

* remove topbar transparency

* cleanup unused

* responsive dashboard

* better mobile header

* dont need to calc 64px less since header is using position fixed

* add status badge component

* update status badges

* further simplify layout

* allow undefined status as prop

* use new status badges for alerts

* update status badges for all resources

* undo layout change

* tidy up resource page layout, add back button

* no need for button wrapper

* remove unused

* build cancel log

* update ts types

* fix fe type changes

* fe tweaks

* remove on build logs

* core refresh cache immediately on startup

* jwt_ttl

* canonicalize run directory on host

* update canonicalize error message

* core use docker-compose

* fix incorrect project missing, add status string to stack info

* remove entries in "after" that aren't deploying

* fix dockerfiel

* build custom tag postfix

* sync fixes

* ensure UpdateGitProviderAccount doesn't change id

* ensure UpdateDockerRegistryAccount doesn't change id

*  configure providers in the UI

* add // comment support to env, conversions

* add updates for provider deletes

* improve sync pending deploy log

* add more deployment actions

* add backward compat with v1.12 for clone repo

* stack deploy format

* fe

* alert menus clone when click resource link

* rename stacks

* don't close on click

* snake case stack state, in line with deployment state

* sync redeploy stack if newer hash (optional behind resource field 'latest_hash')

* remove nav to tree

* RefreshStack/Sync debug instruments

* improve inline UI docs

* implement resource base_permission backend

* plumbing for Repo build

* build repos

* write env file repos

* add latest hash / message to build info

* add optional hash to update

* keep built_hash updated

* add backend for build / repo latest hash management

* remove unused resources

* clean up repo dirs after cache update

* fix repo info deser error

* add build / repo git status

* fix page layouts

* improve layout responsive

* most config incline docs

* add descriptions for all resource types

* default local auth false

* fix omnibar arrow keys issue

* add compose file to example config

* image registry

* dashboard display no resources messge

* update deps.

* show when no config

* resource sync use config git_provider

* fix networks

* fix deploy error due to after

* update lots of docs

* fix server stat charts not working

* update screenshots

* update changelog

* add a disclaimer

* remove file paths docs stuff

* build repo

* v1.13 - Komodo

* update docs for cli

* fill out the compose example more

---------

Co-authored-by: Karamvir Singh <67458484+karamvirsingh98@users.noreply.github.com>
2024-08-10 09:33:14 -07:00
mbecker20 59cb86d599 serde default on token re Issue 10 2024-08-02 11:13:31 -07:00
mbecker20 5f0a9ad652 remove env vars / conversions / labels # comment support 2024-07-31 13:04:57 -07:00
mbecker20 fc758121da note on login if no auth methods configured 2024-07-31 12:56:59 -07:00
mbecker20 95ccf1af0b reset version on copy 2024-07-31 05:03:33 -07:00
mbecker20 627f7ab585 detect aarch64 periphery install 2024-07-31 04:58:12 -07:00
mbecker20 4238abf61a fix resource sync delete operation 2024-07-31 02:19:24 -07:00
mbecker20 66bfe69983 add note about user periphery install 2024-07-31 00:14:19 -07:00
mbecker20 42b493ae10 host network in example 2024-07-30 15:56:01 -07:00
mbecker20 f4d6c50b67 ensure core config startup log redacted 2024-07-30 14:43:15 -07:00
mbecker20 17176a7d56 add note about upgrading periphery 2024-07-30 14:20:15 -07:00
mbecker20 140b95b70c skip secret interp respected for core secrets 2024-07-30 00:18:28 -07:00
mbecker20 3a2cb73088 improve git https config look 2024-07-29 20:51:55 -07:00
mbecker20 4585533bc5 migration optional env vars 2024-07-29 20:28:57 -07:00
mbecker20 83099f03a1 changelog 2024-07-29 19:36:48 -07:00
mbecker20 9e619c0250 add sync screenshots 2024-07-29 19:34:10 -07:00
mbecker20 edf49dc685 update resource syncs 2024-07-29 19:30:28 -07:00
mbecker20 beffc8c159 consistent dockerfile 2024-07-29 19:18:14 -07:00
mbecker20 d99cf87da0 update client to 1.12 2024-07-29 18:36:42 -07:00
mbecker20 8e19eb7b0f versions 2024-07-29 18:33:14 -07:00
mbecker20 78a0b56c73 migrator readme 2024-07-29 18:32:11 -07:00
mbecker20 bf5dc52237 fix upgrades docs 2024-07-29 18:29:49 -07:00
mbecker20 482ea59d4c add docsite upgrades 2024-07-29 18:28:12 -07:00
Maxwell BeckerandGitHub 7740d36f49 v1.12 Custom Git Providers / Docker Registries (#8)
* update deps

* remove patch when 0 for deployments using specific build version

* implement custom git provider and image registry support

* common providers api

* toml array alias

* username alias account

* get fe to build

* http or https

* fix frontend build

* improve registry / provider config

* frontend build

* rework deployment / builds image registry

* frontend builds

* update build config fe

* configure builder additional accounts / secrets

* guard against managing non-github repo webhooks

* fmt

* md size dashboard

* lowercase organization in image name

* update config docs

* update example env

* provider configuration

* distribute migrator

* fix casing mismatch

* docs
2024-07-29 18:23:58 -07:00
mbecker20 820754deda roadmap 2024-07-24 00:11:58 -07:00
mbecker20 4219884198 roadmapx 2024-07-24 00:11:08 -07:00
mbecker20 d9e24cc35a add roadmap 2024-07-24 00:10:32 -07:00
mbecker20 8d2ce884d9 1.11.1 updated hetzner instances 2024-07-20 02:49:38 -07:00
mbecker20 313b000e64 update hetzner server types 2024-07-20 01:16:52 -07:00
mbecker20 c2f9e29605 close failed procedure execution updates 2024-07-19 23:21:21 -07:00
Maxwell BeckerandGitHub 8c6f38cafb v1.11 Improve permission management (#6)
* add "all permissions" feature on user and user group schema

* prepare support for group all

* implement user.all and user_group.all for broad base permissioning

* clean up unused deps

* sync support user group permissions regex

* 1.11

* fix fe ? issue

* this doesn't work

* sync handle user group all set

* retain above non earlier

* remove permissions that already exist

* update docs

* add user group docs

* minimize user group permissions for execute

* sync toml

* add sync name to slack alert title

* add syncs to alerter white/blacklist

* use \\ instead of $reg

* share resource type base permissions api users and user groups

* manage user / group base permissions ui

* manage user / group base resource type permissions

* update api permission handling

* manage all resource permissions in table

* user show group membership

* update client to 1.11
2024-07-19 02:11:36 -07:00
mbecker20 4a03eba99a granular invalidations 2024-07-17 14:51:51 -07:00
mbecker20 79fe078e3b 1.10.5 cpu/mem only update alert if severity increases (or resolved) 2024-07-17 14:36:22 -07:00
mbecker20 6be032fcd4 update client to 1.10.4 2024-07-16 16:06:38 -07:00
mbecker20 d0c94278ec 1.10.4 fix EnvVar parsing when value contains '=' 2024-07-16 16:05:11 -07:00
mbecker20 03ae7268fd fix server table search when sorting by deployments 2024-07-10 12:09:42 -07:00
mbecker20 f443294818 add clear link to api docs 2024-07-10 02:33:14 -07:00
mbecker20 2202835d86 improve core setup docs 2024-07-10 02:26:58 -07:00
mbecker20 98fbc7a506 improve migrator and add Dockerfile 2024-07-10 02:25:44 -07:00
mbecker20 8ee89296e1 frontend only invalidate on update Complete 2024-07-09 13:50:03 -07:00
mbecker20 989c3d2d01 more compact webhook button labels 2024-07-09 02:26:50 -07:00
mbecker20 dc72883b90 update config example 2024-07-09 02:09:17 -07:00
mbecker20 e99364430f update local client version 2024-07-09 02:06:30 -07:00
mbecker20 e106e38cd9 1.10.3 support multiple github webhook app installations 2024-07-09 02:05:38 -07:00
mbecker20 e4d0c56e49 debug git logs 2024-07-09 00:50:24 -07:00
mbecker20 7427a158f4 full err too large for alert 2024-07-09 00:40:11 -07:00
mbecker20 b926f89954 log on build unsuccessful and alerting 2024-07-09 00:20:03 -07:00
mbecker20 e666a22f08 debug instrument git calls 2024-07-09 00:09:06 -07:00
mbecker20 4107f779a5 fix build increment major version 2024-07-08 13:15:52 -07:00
mbecker20 828d6cdfed improve responsive 2024-07-05 20:19:20 -07:00
mbecker20 fe82400a99 1.10.2 ResourceSync manage repo webhooks 2024-07-05 20:02:20 -07:00
mbecker20 e37fc6adde publish 1.10.1 2024-07-05 03:32:24 -07:00
mbecker20 c21c8f99ae manage webhooks working 2024-07-05 03:29:23 -07:00
mbecker20 78a63f92bb build repo webhook management 2024-07-05 03:17:29 -07:00
mbecker20 ce67655021 core info provide owners 2024-07-05 02:26:18 -07:00
mbecker20 2ccecf38f2 default pk path /github/private-key.pem 2024-07-05 02:15:35 -07:00
mbecker20 1ddae31aad update config example 2024-07-05 02:06:27 -07:00
mbecker20 097fbefa63 1.10.1 2024-07-05 02:02:59 -07:00
mbecker20 b51442a661 ts types 2024-07-05 02:02:25 -07:00
mbecker20 a21d49d224 build / repo webhook write api 2024-07-05 02:02:03 -07:00
mbecker20 c99a33880e Create / Delete webhook api 2024-07-05 01:31:15 -07:00
mbecker20 6ee55262ba webhook management api aware if repo can be managed 2024-07-05 01:18:21 -07:00
mbecker20 878b9b55bb see whether webhooks enabled 2024-07-05 01:05:27 -07:00
mbecker20 af6193f83a update async_timing_util 2024-07-04 21:15:38 -07:00
mbecker20 b8fefddd8b EC2 2024-07-04 19:13:49 -07:00
mbecker20 7f490f5bf2 tweak 2024-07-04 19:12:02 -07:00
mbecker20 efa7c13286 docs 2024-07-04 19:08:48 -07:00
mbecker20 f913be7a0b builder setup guide 2024-07-04 19:03:43 -07:00
mbecker20 35901ef7ea actions can wrap 2024-07-04 17:53:24 -07:00
mbecker20 5b938490fc response 2024-07-04 17:29:45 -07:00
mbecker20 a7326a0116 user group toml export replace target ids with names 2024-07-04 17:10:36 -07:00
mbecker20 877bda91d7 improve log responsiveness 2024-07-04 16:49:08 -07:00
mbecker20 439a091e50 improve resource responsive 2024-07-04 16:29:13 -07:00
mbecker20 b0e89f4963 fix dashboard 2024-07-04 15:46:43 -07:00
mbecker20 b1e4b55ba1 more responsive 2024-07-04 14:41:40 -07:00
mbecker20 d4a1891c70 delete user group 2024-07-04 14:17:03 -07:00
mbecker20 9db7592d7e all_resources tables use right search 2024-07-04 01:25:40 -07:00
mbecker20 84fb603951 1.10 2024-07-01 03:18:26 -07:00
mbecker20 55bac0dd13 check right thing for empty 2024-07-01 03:12:22 -07:00
mbecker20 b143f42363 update mungos 2024-07-01 02:47:06 -07:00
mbecker20 007efd136a 1.10.0 pre 2024-07-01 02:38:24 -07:00
mbecker20 b329767f9e 1.10.0-pre-0 2024-07-01 02:33:01 -07:00
mbecker20 b4231957d5 config for secret args 2024-07-01 02:31:53 -07:00
mbecker20 b4dc446f95 interpolate core variables / secrets into build secret_args 2024-07-01 02:27:03 -07:00
mbecker20 c92515cecc combine into router 2024-07-01 01:44:07 -07:00
mbecker20 f3712feea2 finish periphery clean 2024-07-01 01:39:03 -07:00
mbecker20 0e81d17860 shrink periphery implementation 2024-07-01 01:19:25 -07:00
mbecker20 c3f1557b83 fix mem alert 2024-06-30 00:27:37 -07:00
mbecker20 5f88e4b436 seperate webhook actions 2024-06-25 01:22:38 -07:00
mbecker20 473c6b3867 dont send failed build alert on build cancel 2024-06-24 16:59:34 -07:00
mbecker20 c10edaa5d1 fix builder toml export 2024-06-23 03:00:31 -07:00
mbecker20 9418a6d963 update client to 1.9.0 2024-06-23 02:30:50 -07:00
mbecker20 57646b750f clean up 2024-06-23 02:29:47 -07:00
mbecker20 0d57f9411c can deploy ecr 2024-06-23 02:27:19 -07:00
mbecker20 7d396dd539 clean up ecr 2024-06-23 02:22:14 -07:00
mbecker20 bfe762b71a install unzip 2024-06-23 01:37:12 -07:00
mbecker20 16ede84bac install aws cli core 2024-06-23 01:31:15 -07:00
mbecker20 4524db94db get ecr token using cli 2024-06-23 01:23:56 -07:00
mbecker20 580dab4acd improve error log formatting 2024-06-23 01:02:52 -07:00
mbecker20 645382856a update only flattens one level deep 2024-06-22 23:56:01 -07:00
mbecker20 5c4e6a6dbb select aws config 2024-06-22 23:33:35 -07:00
mbecker20 66810e1efb add method to get availabel aws ecr labels 2024-06-22 23:29:02 -07:00
mbecker20 69a84882f0 1.9.0 2024-06-22 23:06:53 -07:00
mbecker20 41648436a5 default periphery method fields 2024-06-22 22:59:51 -07:00
mbecker20 083a88aa7b implement aws ecr image registry 2024-06-22 22:57:26 -07:00
mbecker20 750f95c90d improve shortcut menu 2024-06-22 18:24:38 -07:00
mbecker20 129f3ecd82 add more kb shortcuts and shortcut menu 2024-06-22 02:56:57 -07:00
mbecker20 1b754f80ab fix double emojis 2024-06-22 01:54:45 -07:00
mbecker20 968a882012 fix alerter table 2024-06-22 01:29:31 -07:00
mbecker20 696ebdb26f label blacklist correctly 2024-06-22 01:25:38 -07:00
mbecker20 8fee04607d imporve slack alerting 2024-06-22 01:10:13 -07:00
mbecker20 6fe250244b add alerter blacklist 2024-06-22 00:30:43 -07:00
mbecker20 b530af0eec send_alerts for sync alert 2024-06-21 23:09:38 -07:00
mbecker20 21e9361079 remove unused 2024-06-21 02:28:35 -07:00
mbecker20 524d2d956b fix alerts usage 2024-06-21 02:23:42 -07:00
mbecker20 aca9633941 add links and errors to slack messages 2024-06-21 01:12:46 -07:00
mbecker20 32e1bd2dda add badges for tag filter shortcuts 2024-06-21 00:15:40 -07:00
mbecker20 cb363d1559 add shift + T and shift + C to manage tags 2024-06-20 23:51:12 -07:00
mbecker20 63eb74b9c8 Add and configure build alerts 2024-06-20 23:41:28 -07:00
mbecker20 bbcc27704f bump rust builder version 2024-06-16 16:00:57 -07:00
mbecker20 0aa9513dd0 1.8.0 2024-06-16 15:36:51 -07:00
mbecker20 26b216b478 add resources page 2024-06-16 15:33:31 -07:00
mbecker20 166299bb57 sync docs 2024-06-16 14:35:09 -07:00
mbecker20 03c47eb3dc remove cli sync 2024-06-16 01:41:54 -07:00
mbecker20 1fcb4ad085 move / update changelog 2024-06-16 01:41:15 -07:00
mbecker20 f51af8fbe1 docs 2024-06-16 01:34:08 -07:00
mbecker20 4a975e1b92 update resource sync docs 2024-06-16 01:33:05 -07:00
mbecker20 ba556e3284 fix doc link 2024-06-16 00:31:23 -07:00
mbecker20 299a326942 log build has new version 2024-06-16 00:20:22 -07:00
mbecker20 a5d4b9aefb add cached results reasons 2024-06-16 00:04:05 -07:00
mbecker20 40b820ae42 add reason to deploy logs 2024-06-15 22:01:14 -07:00
mbecker20 7028bf2996 remove termination_signal for tokio signal 2024-06-15 21:48:54 -07:00
mbecker20 75ebd0e6c0 fix fe cancel logic error 2024-06-15 21:36:26 -07:00
mbecker20 426153df66 try improve toml parse error message 2024-06-15 21:33:53 -07:00
mbecker20 5bd423a6a6 sync deploy new build 2024-06-15 21:15:17 -07:00
mbecker20 c24131d383 nested propogate read resources error 2024-06-15 20:37:29 -07:00
mbecker20 9f54b6c26a 1.8.0. improve env config UI, add sync deploy state management 2024-06-15 20:15:33 -07:00
mbecker20 ab8ae51ece slight more colors 2024-06-15 20:14:25 -07:00
mbecker20 ef2a83ff16 add colors to procedure logs 2024-06-15 20:06:34 -07:00
mbecker20 7872771aee clean up sync log 2024-06-15 19:45:53 -07:00
mbecker20 b12cf858d8 sync deploy logs need \n 2024-06-15 19:36:46 -07:00
mbecker20 38dba91c3a sync deploy accounts for any dependencies in 'after' need deploy 2024-06-15 19:20:45 -07:00
mbecker20 ea8136aa57 add sync deployment state log 2024-06-15 17:31:49 -07:00
mbecker20 f956e12e28 move formatting to shared lib 2024-06-15 17:15:05 -07:00
mbecker20 207ea52b95 add finished log 2024-06-15 17:12:02 -07:00
mbecker20 caf28d3a26 sync deploy 2024-06-15 17:03:16 -07:00
mbecker20 8fff45649d implement sync deployment get updates for view with deploy action 2024-06-15 15:50:10 -07:00
mbecker20 de5df70e11 invert search FE 2024-06-15 00:58:03 -07:00
mbecker20 3df010ac2a read req error debug 2024-06-15 00:54:11 -07:00
mbecker20 2d3beb708e invert logs 2024-06-15 00:28:04 -07:00
mbecker20 1dc22d01c4 improve execute instrumentation 2024-06-15 00:20:28 -07:00
mbecker20 eb029d0408 clone repo to specific directory on host 2024-06-14 23:43:47 -07:00
mbecker20 f926932181 build / deployment env variable / secret selectors 2024-06-14 23:28:08 -07:00
mbecker20 cc96d80c6a string deser filter empty lines 2024-06-14 22:20:39 -07:00
mbecker20 144b49495c string deser can handle empty string 2024-06-14 22:15:02 -07:00
mbecker20 de9354bdc7 frontend manage env with string 2024-06-14 22:10:07 -07:00
mbecker20 38bfee84d7 read resources propogate error 2024-06-14 21:53:13 -07:00
mbecker20 ec33d9fb9e trim incoming value env var string, conversion string, before deserialize 2024-06-14 21:42:59 -07:00
mbecker20 0a66937b1d fix unused liniting 2024-06-14 21:30:10 -07:00
mbecker20 43cc0c3bc1 remove @ in format date 2024-06-14 14:48:22 -07:00
mbecker20 c14b395c70 quick copy variable value 2024-06-12 12:15:29 -07:00
mbecker20 7b8529a7c6 tweak colors 2024-06-12 11:55:06 -07:00
mbecker20 547c089581 update colors 2024-06-12 11:53:39 -07:00
mbecker20 4fe5e461b3 use stroke for icons 2024-06-12 03:48:47 -07:00
mbecker20 edfb873f7c improve error logs 2024-06-12 03:22:51 -07:00
mbecker20 5ef5294c44 remove onkeydown causing redundant create 2024-06-12 03:15:07 -07:00
mbecker20 5d3c50e04f reorder procedure config table 2024-06-12 02:47:41 -07:00
mbecker20 f10efbb5ba add bg to body 2024-06-12 02:39:26 -07:00
mbecker20 39ce98161b add the colors, always plz 2024-06-12 02:21:49 -07:00
mbecker20 cff6e79eee fix omnibar all resource types 2024-06-12 01:46:30 -07:00
mbecker20 dedf22ede8 continue on disabled stage 2024-06-12 01:25:10 -07:00
mbecker20 6955b92a99 add same colors in update 2024-06-12 01:15:39 -07:00
mbecker20 5c63eeab02 better sync coloring 2024-06-12 01:13:33 -07:00
mbecker20 4c14a4ae20 create variable log skip description line if it's empty 2024-06-12 00:39:23 -07:00
mbecker20 29fd856a2d deal with deployment build version 2024-06-11 03:07:56 -07:00
mbecker20 195bdbd94a fix " to \" 2024-06-11 02:14:57 -07:00
mbecker20 298ccd945c improve export dialog sizing 2024-06-11 01:42:06 -07:00
mbecker20 436e4e79e9 toml include ResourceSync 2024-06-11 01:09:37 -07:00
mbecker20 8b8c89d976 1.7.3 procedure stage alias 2024-06-11 00:51:16 -07:00
mbecker20 25c8d25636 1.7.2 default resource config parsing 2024-06-11 00:44:41 -07:00
mbecker20 ea242de2e4 default the config if not exists 2024-06-11 00:34:11 -07:00
mbecker20 be03547407 reorder struct fields for improved toml 2024-06-11 00:04:20 -07:00
mbecker20 9c0d28b311 allow inline arrow up to max length 2024-06-10 23:53:23 -07:00
mbecker20 f269deb99c update toml_pretty 2024-06-10 23:30:17 -07:00
mbecker20 3df8163131 improve procedure toml 2024-06-10 23:14:04 -07:00
mbecker20 33a16a9bd2 need 2 \n 2024-06-10 22:36:17 -07:00
mbecker20 215e7d1bdc update toml_pretty 2024-06-10 22:11:40 -07:00
mbecker20 25e0905c0c fix deserializers 2024-06-10 21:31:17 -07:00
mbecker20 1c07ccea85 bump toml for multiline string 2024-06-10 19:26:01 -07:00
mbecker20 405ec1b8cc bump toml_pretty for fix 2024-06-10 18:58:33 -07:00
mbecker20 4f212bd06f update toml_pretty with skip empty strings 2024-06-10 18:43:53 -07:00
mbecker20 074f4ea2db fix toml 2024-06-10 18:07:05 -07:00
mbecker20 c9abccaf02 build use string serialized version 2024-06-10 17:59:03 -07:00
mbecker20 6428fa6de2 1.7.1 2024-06-10 17:37:22 -07:00
mbecker20 883f54431d custom to toml serializer for api 2024-06-10 17:34:56 -07:00
mbecker20 28dc030e2b custom Vec<EnvVar>, Vec<Conversion> deserializers to support config them as string 2024-06-10 14:39:51 -07:00
mbecker20 145d933e63 pt-2 2024-06-10 01:47:46 -07:00
mbecker20 9772ca1a1c add Resource Sync system user 2024-06-10 01:46:26 -07:00
mbecker20 4059b69201 core auto refreshes all syncs every 5 min 2024-06-09 23:49:02 -07:00
mbecker20 8e175ea5a1 add pending sync alert variant 2024-06-09 23:23:40 -07:00
mbecker20 d931b8b4e7 fix deployment when image_type None 2024-06-09 23:15:52 -07:00
mbecker20 0982800ad2 update client to 1.7.0 2024-06-09 22:47:49 -07:00
mbecker20 4382ad0b3b migrate 1.6 to 1.7 2024-06-09 22:46:21 -07:00
mbecker20 e7891f7870 update docs for ghcr 2024-06-09 21:56:01 -07:00
mbecker20 6bada46841 add export variables / user groups 2024-06-09 21:32:53 -07:00
mbecker20 eae6cbd228 label the image 2024-06-09 20:55:09 -07:00
mbecker20 a0ee6180b2 finish 1.7.0 2024-06-09 19:45:46 -07:00
mbecker20 3ce3de8768 configure registry 2024-06-09 19:34:49 -07:00
mbecker20 6c46993b61 New Monitor logo cr. George Weston 2024-06-09 18:38:58 -07:00
mbecker20 fbd9d14aaa change handler loggin 2024-06-09 15:11:18 -07:00
mbecker20 1011ec60ab rename to ghcr 2024-06-09 14:55:26 -07:00
mbecker20 48e17a7c87 update config example 2024-06-09 03:43:26 -07:00
mbecker20 a94baded55 1.7.0 2024-06-09 03:06:17 -07:00
mbecker20 e97c0873cf get types 2024-06-09 03:05:07 -07:00
mbecker20 43a0b76811 small 2024-06-09 03:04:05 -07:00
mbecker20 2d2577e5ee ghcr 2024-06-09 02:46:57 -07:00
mbecker20 202ac77de3 from on the new types 2024-06-09 02:18:40 -07:00
mbecker20 568c963419 core / periphery support ghcr 2024-06-09 02:01:51 -07:00
mbecker20 5c3294241d add 1.6 build schema for 1.7 migration 2024-06-08 15:35:31 -07:00
mbecker20 648a04be88 add sleep execution for procedure 2024-06-08 14:51:19 -07:00
mbecker20 1b5822f649 custom version deserializer. support string versions 2024-06-08 14:23:26 -07:00
mbecker20 c41a008603 fix variable update 2024-06-08 05:22:32 -07:00
mbecker20 603243b0eb need partial default on alerter enabled 2024-06-08 04:56:52 -07:00
mbecker20 d09ab36696 any sync error shows up in log 2024-06-08 04:34:09 -07:00
mbecker20 ad168c87f7 use approp dialog menus 2024-06-08 04:12:55 -07:00
mbecker20 914f4c6197 seems to work 2024-06-08 03:35:22 -07:00
mbecker20 c73d918e18 no unnecessary user group sync 2024-06-08 02:56:53 -07:00
mbecker20 9d116f56cb sort lists by name 2024-06-08 02:21:32 -07:00
mbecker20 8a8dede5db resource sync state 2024-06-08 02:12:04 -07:00
mbecker20 d2cecf316c add pending update alert 2024-06-08 01:39:18 -07:00
mbecker20 cad1ee123e improv the sync 2024-06-08 00:50:30 -07:00
mbecker20 6aa801b705 lock sync dir access 2024-06-07 22:02:58 -07:00
mbecker20 078ba59002 ensure sync directory exist 2024-06-07 21:02:28 -07:00
mbecker20 5eacb7191b fix the fe errors with most boilerplate 2024-06-07 20:00:01 -07:00
mbecker20 45eafd10b9 finish sync backend? 2024-06-07 19:00:03 -07:00
mbecker20 42c486807c implement resource sync cli 2024-06-07 17:11:58 -07:00
mbecker20 8c31fcff02 backend for resource sync 2024-06-07 03:52:07 -07:00
mbecker20 49f1d40ce8 implement RunSync 2024-06-07 02:43:45 -07:00
mbecker20 bf85e886bd abit more 2024-06-06 03:02:25 -07:00
mbecker20 eda0b233ca implement sync 2024-06-06 02:38:47 -07:00
mbecker20 5efb227851 update ts client response 2024-06-05 23:46:05 -07:00
mbecker20 1a45fffe75 move some libraries out 2024-06-05 23:44:06 -07:00
mbecker20 fa72f2e5ef update execute task handling 2024-06-05 22:50:03 -07:00
mbecker20 c9152db300 unneeded import 2024-06-05 22:42:28 -07:00
mbecker20 25fcca7246 should fix procedure 2024-06-05 22:42:04 -07:00
mbecker20 ac449e38d5 init boilerplate 2024-06-05 17:29:59 -07:00
mbecker20 d6c66948ba skip update in execute task instrument 2024-06-05 16:16:21 -07:00
mbecker20 b6af790aef sort resources in selector 2024-06-05 15:39:47 -07:00
mbecker20 36a49210a0 fix filter by split 2024-06-05 15:16:30 -07:00
mbecker20 d2b2aa0550 its not really distributed 2024-06-05 02:41:08 -07:00
mbecker20 7f4c883416 hide / show to toggle alert area 2024-06-05 01:59:16 -07:00
mbecker20 676fb3c732 common filtering method 2024-06-04 05:50:36 -07:00
mbecker20 17da4bd2fa procedure setconfig on update 2024-06-04 04:46:40 -07:00
mbecker20 b44e57bbf6 improve update date format 2024-06-04 04:36:55 -07:00
mbecker20 6aa5b5faae use same search alg for all command inputs 2024-06-04 04:21:24 -07:00
mbecker20 9565855477 fix fe error 2024-06-04 02:23:53 -07:00
mbecker20 3504c083b4 export all resources toml filter resources by tag 2024-06-04 02:11:07 -07:00
mbecker20 5fdaa9a808 make overflowing tags wrap 2024-06-04 01:45:20 -07:00
mbecker20 ec35b14077 further improve BuildState if cancel. 2024-06-04 01:22:41 -07:00
mbecker20 158f3ad89b fmt update operation with regex everywhere 2024-06-03 16:36:53 -07:00
mbecker20 7257ecbaed version link to docs 2024-06-03 16:12:09 -07:00
mbecker20 a2a94f23ee publish client + cli 1.6.2 2024-06-03 15:03:43 -07:00
mbecker20 03cad5b23b partial config from files first merged onto full config default before diff with remote 2024-06-03 15:01:14 -07:00
mbecker20 2460b5edf7 update log internal scroll 2024-06-03 03:10:35 -07:00
mbecker20 83fdb180aa avoid deployment state change alert involving status Unknown 2024-06-03 03:01:23 -07:00
mbecker20 9b1d32ebdf base64 encode aws user data before send 2024-06-03 00:44:45 -07:00
mbecker20 ea4ae7651c readme 2024-06-02 21:19:46 -07:00
mbecker20 5f6fabd925 1.6.1 pass creds as args cli 2024-06-02 21:17:23 -07:00
mbecker20 38d9495ab1 fix cli readme 2024-06-02 21:03:37 -07:00
mbecker20 46ad5b3953 1.6.0 Improve procedure with multiple stages 2024-06-02 21:00:06 -07:00
mbecker20 e60b817208 improve saving 2024-06-02 20:57:44 -07:00
mbecker20 0ce5248292 improve changes made visibility 2024-06-02 20:54:41 -07:00
mbecker20 050c29f4a3 show when changes made 2024-06-02 20:30:06 -07:00
mbecker20 8580728933 alert config working 2024-06-02 20:15:49 -07:00
mbecker20 3c5868d111 alert refactor 2024-06-02 19:15:13 -07:00
mbecker20 40e1b1ff88 improve build cancel disabled logic to prevent redundant cancels 2024-06-02 17:50:33 -07:00
mbecker20 99641b2e39 improve update toast title 2024-06-02 17:42:15 -07:00
mbecker20 f0e7757eb4 improve validate CancelBuild 2024-06-02 17:39:13 -07:00
mbecker20 f7283b1fc1 update alerter to support type filtering. 2024-06-02 17:16:35 -07:00
mbecker20 771af21eae migrator support migrate permissions 2024-06-02 15:35:36 -07:00
mbecker20 0dda791ec7 fix build not try add_update 2024-06-02 04:56:37 -07:00
mbecker20 bc76b1c07e only push recently viewed if exists 2024-06-02 04:43:01 -07:00
mbecker20 8b537924fb correct execution target passed by name 2024-06-02 04:38:32 -07:00
mbecker20 f5ce3570e4 execute api returns update immediately 2024-06-02 04:14:51 -07:00
mbecker20 f1e51d275c move stages up / down 2024-06-02 02:39:48 -07:00
mbecker20 eaa10d96b5 finish new procedure config 2024-06-02 02:06:01 -07:00
mbecker20 037364068d refresh caches on create / update 2024-06-02 01:07:53 -07:00
mbecker20 2441bc8cbf fix lint 2024-06-02 00:44:47 -07:00
mbecker20 92ac003910 backend for updated procedure schema 2024-06-02 00:36:39 -07:00
mbecker20 693f24763f new deployment / repo from server page 2024-06-01 20:33:38 -07:00
mbecker20 d9d44ceee1 update readme with manual 2024-06-01 19:58:20 -07:00
mbecker20 30ab8ed17b update cli with execute features. 2024-06-01 19:47:46 -07:00
mbecker20 2bf2be54cc bookworm base 2024-05-29 13:09:52 -07:00
mbecker20 b7ea680958 alert table rename Target to Resource 2024-05-29 01:48:32 -07:00
mbecker20 2a56d09f89 improve periphery start command docs 2024-05-29 01:40:45 -07:00
mbecker20 2612f742b2 remove trailing whitespace in error log 2024-05-29 00:22:04 -07:00
mbecker20 29bdf5c71d pretty clone fail message 2024-05-29 00:20:58 -07:00
mbecker20 873d9ea433 builder instance failed reachability adds log that instance will be terminated 2024-05-29 00:16:55 -07:00
mbecker20 717f3afa89 fix build config when not builder 2024-05-28 14:33:52 -07:00
mbecker20 ec31d1af01 fix 2024-05-28 05:35:35 -07:00
mbecker20 9e5c52b9a4 update client version 2024-05-28 05:32:19 -07:00
mbecker20 762873d5be implement ui_write_disabled 2024-05-28 05:30:37 -07:00
mbecker20 67fa512975 core version in topbar 2024-05-28 05:06:39 -07:00
mbecker20 502dd3a4a8 update client version 2024-05-28 04:58:31 -07:00
mbecker20 8c22bdd473 1.5.4 add variable support to monitor cli 2024-05-28 04:57:41 -07:00
mbecker20 ba6801da11 cli much faster 2024-05-28 04:02:34 -07:00
mbecker20 309802093c 1.5.3 add ListFull methods 2024-05-28 03:42:35 -07:00
mbecker20 3d1e3009b3 add ListFull methods 2024-05-28 03:25:50 -07:00
mbecker20 fdc23c2650 improve docs 2024-05-28 03:06:42 -07:00
mbecker20 072ee6834e update dashboard screenshots 2024-05-28 01:44:11 -07:00
mbecker20 bedbf76349 red 2024-05-28 01:40:44 -07:00
mbecker20 e26d1211cc Cloud 2024-05-28 01:38:35 -07:00
mbecker20 0342ee4dd9 Hetzner 2024-05-28 01:38:08 -07:00
mbecker20 669d5c81b4 read. me. 2024-05-28 01:35:49 -07:00
mbecker20 defbab5955 monitor cli 2024-05-28 01:30:57 -07:00
mbecker20 9405295e4a update changelog 2024-05-28 01:23:44 -07:00
mbecker20 28c077ed4c remove hetzner automount 2024-05-26 02:30:56 -07:00
mbecker20 61406c1b00 add back wait for volume 2024-05-26 02:10:34 -07:00
mbecker20 64638730b9 waiting for volumes makes no difference. dont seem to automount 2024-05-26 01:34:14 -07:00
mbecker20 c0942c6d1d remove execute fail message 2024-05-26 00:42:33 -07:00
mbecker20 ff964cd0fe fix updates 2024-05-26 00:38:59 -07:00
mbecker20 d56f632a11 improve unknown server styling 2024-05-26 00:21:43 -07:00
mbecker20 a7f22b6cfb instrument ServerTemplate write api 2024-05-26 00:09:38 -07:00
mbecker20 6053fc1d99 hetzner poll volumes for ready before launch server 2024-05-26 00:04:31 -07:00
mbecker20 573ff1863c 1.5.2 2024-05-25 23:34:14 -07:00
mbecker20 dd4a9b0cb5 add defaults to Hetzner volume 2024-05-25 23:32:16 -07:00
mbecker20 d243cf2da7 all resources search case insensitive 2024-05-25 23:07:54 -07:00
mbecker20 4e06e788ae PushRecentlyViewed and SetLastSeenUpdate should be debug instrument 2024-05-25 21:13:25 -07:00
mbecker20 a0f71f8af5 table search not case sensitive 2024-05-25 21:07:53 -07:00
mbecker20 fcbb75d0c0 update some tracing stuff 2024-05-25 20:46:56 -07:00
mbecker20 0a8419bb13 update client to 1.5.1 2024-05-25 20:38:35 -07:00
mbecker20 40fe76cf27 1.5.1 move routes to /user 2024-05-25 20:36:52 -07:00
mbecker20 5594d3c1d9 add server to repo table / info 2024-05-25 19:45:23 -07:00
mbecker20 b12aeb259f clean up 2024-05-25 18:38:17 -07:00
mbecker20 b121b0ac07 fix remove from recently viewed 2024-05-25 18:34:05 -07:00
mbecker20 a9f1d91b1b update deps 2024-05-25 18:06:49 -07:00
mbecker20 abf48d0243 1.5.0 doc update and add other_data 2024-05-25 17:57:31 -07:00
mbecker20 447690d8bf remove TextUpdateMenu update on enter 2024-05-25 16:58:34 -07:00
mbecker20 a70c0a2697 increase hetzner polling time 2024-05-25 15:49:10 -07:00
mbecker20 0758e6ff81 get ip after instance is running 2024-05-25 15:29:11 -07:00
mbecker20 ea0e059ee1 hetzner response optional parsing 2024-05-25 14:26:26 -07:00
mbecker20 c9e0524794 add repos tab to server page 2024-05-25 14:05:02 -07:00
mbecker20 81ceaf1eae move automount 2024-05-25 13:50:59 -07:00
mbecker20 37c07ff748 only actually add automount if volumes nonempty 2024-05-25 13:43:06 -07:00
mbecker20 62e8943ebe improve client error message 2024-05-25 13:40:05 -07:00
mbecker20 99ccffbc38 configure hetzner template working 2024-05-25 03:09:31 -07:00
mbecker20 84dc29b77f update ts types 2024-05-25 01:37:05 -07:00
mbecker20 81bab4aa50 clean up some unused stuff 2024-05-25 01:35:28 -07:00
mbecker20 9fa2fd0f58 implement hetzner server launch 2024-05-25 01:16:54 -07:00
mbecker20 3745967690 ensure env overrides fully applied 2024-05-24 16:40:15 -07:00
mbecker20 e8cfc13342 implement transparent mode 2024-05-23 02:19:42 -07:00
mbecker20 ec47bb11ee start on hetzner 2024-05-23 01:47:02 -07:00
mbecker20 d008c95853 no destructive update toasts 2024-05-22 04:27:33 -07:00
mbecker20 4986d70506 remove unneded build toasts 2024-05-22 04:23:53 -07:00
mbecker20 1372a5fb39 3s 2024-05-22 04:22:06 -07:00
mbecker20 f54224650f fix update 2024-05-22 04:20:48 -07:00
mbecker20 2eee1459e7 fix ws 2024-05-22 04:02:37 -07:00
mbecker20 5a3fd891c4 huh 2024-05-22 04:00:43 -07:00
mbecker20 ba3f288c2d improve toasts 2024-05-22 03:55:26 -07:00
mbecker20 6d5fd7dc5d improve update table 2024-05-22 03:25:49 -07:00
mbecker20 df3fd7c4e9 update builder ami 2024-05-22 03:15:30 -07:00
mbecker20 395f032ee2 fix update details name 2024-05-22 03:15:23 -07:00
mbecker20 de2bd800c4 update client to 1.4.1 2024-05-22 02:01:40 -07:00
mbecker20 75352a91ff 1.4.1 fix cli - shouldn't send update if no change 2024-05-22 01:59:25 -07:00
mbecker20 9b12270d04 update client published version 2024-05-22 00:29:34 -07:00
mbecker20 7fc378798f fix cli toml patch 2024-05-22 00:28:21 -07:00
mbecker20 3db2c93303 expande resource table status column 2024-05-22 00:25:54 -07:00
mbecker20 150d6562bf improve table with better row sizing 2024-05-21 01:31:46 -07:00
mbecker20 c3b549b051 resource to_list_item should be infallible 2024-05-21 00:46:13 -07:00
mbecker20 931f2bd92d log auto bottom and increase height 2024-05-20 22:56:32 -07:00
mbecker20 6b6324d79c theme toggle indicator 2024-05-20 22:52:25 -07:00
mbecker20 2c65d924f9 dashboard recents 2 cols unless 2xl 2024-05-20 22:46:21 -07:00
mbecker20 dd1fecf190 a little smaller 2024-05-20 22:36:01 -07:00
mbecker20 aa96a37db4 decrease sidebar vertical size 2024-05-20 21:40:14 -07:00
mbecker20 ec9e9638f5 more gap between resources on dashboard 2024-05-20 03:55:58 -07:00
mbecker20 e33019cab8 add prune images to prune loop 2024-05-20 03:55:01 -07:00
mbecker20 951cb82e0c supports 2024-05-20 03:34:59 -07:00
mbecker20 0643f96053 log 2024-05-20 03:34:07 -07:00
mbecker20 56d835f2d2 not 2024-05-20 03:33:02 -07:00
mbecker20 d8fb8f8649 fix 2024-05-20 03:31:52 -07:00
mbecker20 7197d628e5 fit 2024-05-20 03:30:34 -07:00
mbecker20 96083178dd add changelog to readme 2024-05-20 03:29:45 -07:00
mbecker20 9d1b705ab1 improve login page 2024-05-20 01:36:14 -07:00
mbecker20 2582bc9ba3 simplify resource components, improve update details loading behavior 2024-05-19 15:27:02 -07:00
mbecker20 44f34b9b40 show core secrets on variables page 2024-05-19 02:56:32 -07:00
mbecker20 bbb18d8280 standard search bar location 2024-05-19 02:38:24 -07:00
mbecker20 da95b7d074 add lizard logo / favicon 2024-05-19 02:20:43 -07:00
mbecker20 6b25309aed variables working 2024-05-19 01:51:09 -07:00
mbecker20 f8e371af31 periphery needs axum feature 2024-05-18 16:00:20 -07:00
mbecker20 a0f5ae8c7f add core side interpolation to update 2024-05-18 15:58:23 -07:00
mbecker20 2f371af288 1.4.0 2024-05-18 15:37:30 -07:00
mbecker20 76840efddc implement core variables / secrets on the backend 2024-05-18 15:34:58 -07:00
mbecker20 8f01e441a4 increase per page limit of alerts and updates 2024-05-18 02:42:03 -07:00
mbecker20 41a6e0a65a improve dashboard 2024-05-18 02:34:47 -07:00
mbecker20 40027f7430 improve alert table 2024-05-18 01:07:23 -07:00
mbecker20 a2c69aba87 improve deployment build version selector 2024-05-18 00:49:57 -07:00
mbecker20 a5d3fbedc6 remove build versions pagination 2024-05-18 00:12:08 -07:00
mbecker20 b311b11785 label recents 2024-05-18 00:05:44 -07:00
mbecker20 7a0b29b387 move mongo / dockers deps to client features 2024-05-17 23:48:05 -07:00
mbecker20 d3a87fdb5f update snippet 2024-05-17 22:40:23 -07:00
mbecker20 9b7ab6d98a update resolver and remove async-trait 2024-05-17 22:38:06 -07:00
mbecker20 c302e28d86 improve omnibar search suggestion 2024-05-17 02:13:53 -07:00
mbecker20 33be989e3a dashboard2 2024-05-17 02:07:48 -07:00
mbecker20 c9d65300c9 work on dashboard 2 2024-05-17 01:35:34 -07:00
mbecker20 e96b676366 add build / repo / procedure state stuff to summary 2024-05-17 01:10:48 -07:00
mbecker20 0bff4a5e51 10 recents per resource type 2024-05-16 00:02:09 -07:00
mbecker20 9b12334922 update ts types and fix stuff 2024-05-15 19:17:54 -07:00
mbecker20 68659630fc split recently viewed by resource type 2024-05-15 19:15:03 -07:00
mbecker20 8b33647620 add prop 2024-05-15 02:32:21 -07:00
mbecker20 871aba62d5 move description to right 2024-05-15 02:21:06 -07:00
mbecker20 c649094a8a intro 2024-05-14 23:15:57 -07:00
mbecker20 e3c11db89e update deps 2024-05-14 02:10:10 -07:00
mbecker20 c43293109d add repo and homepage 2024-05-14 01:55:13 -07:00
mbecker20 d3e4f9f638 1.3.0 clean publish 2024-05-14 01:43:01 -07:00
mbecker20 eecf583b0e add dotenv for docsite convenience 2024-05-14 01:37:50 -07:00
mbecker20 a518806d8b docs 2024-05-14 01:33:38 -07:00
mbecker20 8a4611c380 fix link 2024-05-14 01:20:30 -07:00
mbecker20 d679fbe72f client readme 2024-05-14 01:17:55 -07:00
mbecker20 1cf02bc4b4 docs 2024-05-14 01:00:04 -07:00
mbecker20 bf703eef35 frontend support procedure state 2024-05-13 22:28:45 -07:00
mbecker20 985058afb0 ts types 2024-05-13 15:30:37 -07:00
mbecker20 eac1145958 add ProcedureState 2024-05-13 15:30:23 -07:00
mbecker20 1b408d92d9 theme 2024-05-13 01:32:24 -07:00
mbecker20 ee95c2c76b update screenshots 2024-05-13 01:31:49 -07:00
mbecker20 e83124ebff build ConfigOrDeployments 2024-05-13 01:11:12 -07:00
mbecker20 e912ae050a deploy working 2024-05-13 01:01:06 -07:00
mbecker20 99253d6182 build extra arg suggestions 2024-05-13 00:14:12 -07:00
mbecker20 ef91577ac5 check disabled 2024-05-12 23:48:53 -07:00
mbecker20 b97f9b30b3 aws config looking good 2024-05-12 23:44:06 -07:00
mbecker20 7cb11dbc5d improve builder config 2024-05-12 23:33:33 -07:00
mbecker20 6d815629fc everything looking good 2024-05-12 23:12:54 -07:00
mbecker20 f8021d8541 repo config good 2024-05-12 23:01:25 -07:00
mbecker20 1f444fdbc2 builds looking good 2024-05-12 22:58:03 -07:00
mbecker20 af76dd1be4 more config 2024-05-12 22:38:57 -07:00
mbecker20 5cb91c6f8d improve config 2024-05-12 21:35:47 -07:00
mbecker20 de5502aec7 dark less blue 2024-05-12 19:39:23 -07:00
mbecker20 ef4ae4c5f2 state aware repo actions 2024-05-12 16:03:56 -07:00
mbecker20 866eb6d81b looking good 2024-05-12 15:55:49 -07:00
mbecker20 58d6c16eea update sheet from top 2024-05-12 15:37:56 -07:00
mbecker20 ccbf13ae84 get username return avatar 2024-05-12 13:44:32 -07:00
mbecker20 21f6acd3d7 add other resources to omnisearch 2024-05-12 13:11:52 -07:00
mbecker20 dce59d1383 center search 2024-05-12 13:07:10 -07:00
mbecker20 2fb544c3b0 sidebar gap 2024-05-12 13:02:47 -07:00
mbecker20 1ba288be79 split sidebar home 2024-05-12 12:59:45 -07:00
mbecker20 1ff21d2986 more cli loggin 2024-05-12 12:21:38 -07:00
mbecker20 79cc2c1bb7 improve cli logging 2024-05-12 12:15:25 -07:00
mbecker20 17b2e6660c rename alert_logger -> alerter. cli colors 2024-05-12 11:59:49 -07:00
mbecker20 4ef095fe55 improve server stats tables 2024-05-12 04:23:38 -07:00
mbecker20 fb0a7352e3 filter out docker overlay disks 2024-05-12 03:49:29 -07:00
mbecker20 9a087e5975 clean up resource / tree view 2024-05-12 03:26:45 -07:00
mbecker20 814e47031d dope search 2024-05-12 02:55:13 -07:00
mbecker20 1304565e40 fix log to bottom 2024-05-12 01:54:31 -07:00
mbecker20 85616d0669 command loops 2024-05-12 01:46:22 -07:00
mbecker20 feff4647e7 add display for repo latest hash / message 2024-05-12 01:41:41 -07:00
mbecker20 549e15bfe2 add more image tags 2024-05-12 01:24:43 -07:00
mbecker20 a08baf8432 actually mount GetLatestCommit 2024-05-12 01:18:33 -07:00
mbecker20 99c47ce133 just mess with stuff 2024-05-12 01:09:58 -07:00
mbecker20 26a4691c0b server page - swap version / stats link 2024-05-11 23:55:14 -07:00
mbecker20 addb35aa69 give placeholders 2024-05-11 23:38:48 -07:00
mbecker20 16bf78f9ad enable commit config 2024-05-11 23:11:41 -07:00
mbecker20 3ed4f91d82 periphery cli args name to periphery 2024-05-11 23:06:04 -07:00
mbecker20 653fb894a2 delete file 2024-05-11 22:44:13 -07:00
mbecker20 0f9798a5f2 1.2.0 2024-05-11 22:34:35 -07:00
mbecker20 6776a20ec5 build repo state cache 2024-05-11 22:30:33 -07:00
mbecker20 fb21e8586f clone commit hash 2024-05-11 21:38:29 -07:00
mbecker20 8b2c4d604a periphery get repo status 2024-05-11 18:42:21 -07:00
mbecker20 c0b010d5ce rename DockerContainerState -> DeploymentState 2024-05-11 18:29:40 -07:00
mbecker20 97de34a088 align state / status distinction 2024-05-11 18:22:24 -07:00
mbecker20 6c0b76a270 add big icons 2024-05-11 18:04:30 -07:00
mbecker20 eebd44ab9b common resource filter 2024-05-11 17:42:38 -07:00
mbecker20 783250c5ce sort build / repo status update query by most recent 2024-05-11 16:12:11 -07:00
mbecker20 70ff93050f choose between config / log for deployment 2024-05-11 16:06:36 -07:00
mbecker20 1cc1813185 fix dev fe build 2024-05-11 14:50:05 -07:00
mbecker20 b4f9b87d06 update resources, cli 2024-05-11 14:48:26 -07:00
mbecker20 26b09a767e unlink 2024-05-11 13:44:51 -07:00
mbecker20 bba6c4d8b6 add status to build / repo 2024-05-10 22:59:20 -07:00
mbecker20 ea440235c4 configure enable / disable action on webhook recieve 2024-05-10 21:54:41 -07:00
mbecker20 f9949bf988 readOnly webhhok copy 2024-05-10 20:40:54 -07:00
mbecker20 b978db012e slight style 2024-05-10 20:37:56 -07:00
mbecker20 bc2fbdd657 remove rws and code faster reconnect 2024-05-10 18:04:35 -07:00
mbecker20 a5571bcf4d 2xl show 8 recents 2024-05-10 17:30:20 -07:00
mbecker20 683a528dd9 mx-8 2024-05-10 17:23:28 -07:00
mbecker20 4a283b6052 remove container on topbar 2024-05-10 17:21:11 -07:00
mbecker20 37224ee1ad dont req for username of built in users 2024-05-10 17:14:55 -07:00
mbecker20 5e7445b10d add a god damn sidebar 2024-05-10 17:07:51 -07:00
mbecker20 1829a7da34 update diff looking good 2024-05-10 03:59:51 -07:00
mbecker20 4a1a653bd9 rust 1.78.0 2024-05-10 03:40:30 -07:00
mbecker20 840c1a87d0 try putting the html in th diff directly 2024-05-10 03:19:18 -07:00
mbecker20 c90368e2af add periphery build repo 2024-05-10 02:29:47 -07:00
mbecker20 1f9d74fadb fix default creds path 2024-05-10 02:28:06 -07:00
mbecker20 5b261058fe add updates to dashboard 2024-05-10 02:04:23 -07:00
mbecker20 cf6632ba02 partial_derive2 0.4.2 better diffs 2024-05-10 01:50:08 -07:00
mbecker20 c7124bd63c colored diff 2024-05-10 01:03:23 -07:00
mbecker20 ba19e45607 imporve config styling 2024-05-10 00:50:29 -07:00
mbecker20 20282ffcbb update frontend deps 2024-05-10 00:10:40 -07:00
mbecker20 cb8ad90838 cli readme and default creds path 2024-05-09 22:29:40 -07:00
mbecker20 caac3fdcc4 v{version} 2024-05-09 15:51:54 -07:00
mbecker20 44da282060 improve server version 2024-05-09 15:47:58 -07:00
mbecker20 a2e27b09fc show version 2024-05-09 15:39:30 -07:00
mbecker20 c1b1f397fd comments 2024-05-09 15:36:15 -07:00
mbecker20 1d0f239594 delete binary before recurl 2024-05-09 15:34:03 -07:00
mbecker20 549bc78799 log version 2024-05-09 15:28:32 -07:00
mbecker20 9eb9b57e36 install load latest version automatically if its not passed 2024-05-09 15:25:57 -07:00
mbecker20 c38849961e add Repos to search 2024-05-09 14:08:01 -07:00
mbecker20 3acfa0c4b1 more client docs 2024-05-09 03:25:37 -07:00
mbecker20 62b083c3be docsite 2024-05-09 03:12:53 -07:00
mbecker20 ee6fc4c590 include description / tags in diff 2024-05-09 01:53:29 -07:00
mbecker20 4fa550b3d3 monrun diffing 2024-05-09 01:33:03 -07:00
mbecker20 1c44ae98fb monrun / api better diffs 2024-05-09 00:34:21 -07:00
mbecker20 148223f995 config diff update log 2024-05-08 00:34:41 -07:00
mbecker20 4678f83542 fix clippy lints 2024-05-08 00:21:37 -07:00
mbecker20 340bac078f unneeded in cargo toml 2024-05-07 23:31:31 -07:00
mbecker20 3f8e75bbd8 update to partial derive 0.4.0 2024-05-07 23:29:57 -07:00
mbecker20 c4278d14a9 only show actions if more than 0 Actions on resource 2024-05-07 04:08:12 -07:00
mbecker20 4909106c3c turn off build icon spinning. still turns green 2024-05-07 03:45:00 -07:00
mbecker20 0f04a2848a clean up action states 2024-05-07 03:43:20 -07:00
mbecker20 ba073bf8b2 minimize update diffs 2024-05-07 03:40:30 -07:00
mbecker20 640809aa6b use trait for resource crud 2024-05-07 02:54:01 -07:00
mbecker20 943bb4c61a handle update config / description / tags seperately 2024-05-06 03:10:57 -07:00
mbecker20 ef43cb7920 clean up deployments toml 2024-05-06 02:39:04 -07:00
mbecker20 1abe634679 export individual resources 2024-05-06 02:24:35 -07:00
mbecker20 18ab18b6f6 fix for server template sync 2024-05-06 01:55:14 -07:00
mbecker20 aad971a599 sync working 2024-05-06 01:44:20 -07:00
mbecker20 3d9da97d7b monrun better check for empty 2024-05-06 01:36:22 -07:00
mbecker20 2d0a09f760 monrun 2024-05-06 01:12:14 -07:00
mbecker20 568c317d6d create repo does not clone 2024-05-06 00:47:27 -07:00
mbecker20 f0e1f253f4 add queue to listeners using locks 2024-05-06 00:33:19 -07:00
mbecker20 7634b9fa1d example 2024-05-06 00:21:03 -07:00
mbecker20 2e1795eba6 webhook 2024-05-06 00:16:22 -07:00
mbecker20 0f6b3d6e9b add github webhook copiers 2024-05-06 00:00:47 -07:00
mbecker20 a70afcc461 fix build client 2024-05-05 23:20:45 -07:00
mbecker20 d78fc2b282 improve onpull 2024-05-05 23:17:27 -07:00
mbecker20 249610afce frontend onpull 2024-05-05 22:55:37 -07:00
mbecker20 b93b639b40 add extra args style 2024-05-05 22:40:27 -07:00
mbecker20 13ceb55fe8 fix primary dropdown templates 2024-05-05 20:36:56 -07:00
mbecker20 7ebd38d350 slight style 2024-05-05 20:32:19 -07:00
mbecker20 c12c74005e finish configure server templates 2024-05-05 19:08:47 -07:00
mbecker20 c44dc1c6f6 clean server template schema 2024-05-05 18:39:10 -07:00
mbecker20 cd2b9ec4ed validate name not taken on LaunchServer 2024-05-05 16:35:55 -07:00
mbecker20 dc62442c00 LaunchServer revise 2024-05-05 14:16:19 -07:00
mbecker20 81a90f7ae4 launch server 2024-05-05 14:08:49 -07:00
mbecker20 af092e0d88 include server template in monrun export / import 2024-05-05 13:18:50 -07:00
mbecker20 0e70015fd1 add server template page 2024-05-05 13:02:25 -07:00
mbecker20 a214deef86 fix GetServerTemplatesSummary 2024-05-05 13:00:46 -07:00
mbecker20 0efb2966b0 set build version to 0.0.0 on Copy 2024-05-04 23:54:09 -07:00
mbecker20 1e8422a506 custom placeholder for AccountSelector 2024-05-04 23:10:46 -07:00
mbecker20 7bb386e6d0 Account Selector can set back to None 2024-05-04 18:57:42 -07:00
mbecker20 c464ca5612 resources clear their config after update completes 2024-05-04 18:11:23 -07:00
mbecker20 742630fdee create new resources navs to created resource 2024-05-04 17:54:21 -07:00
mbecker20 154fd899fe fix all the links 2024-05-04 17:49:06 -07:00
mbecker20 aa25f9d4c9 servers init disabled 2024-05-04 17:33:05 -07:00
mbecker20 eeed94c8fd === PERIPHERY INSTALLER === 2024-05-04 16:45:39 -07:00
mbecker20 b2f771199d default repos path 2024-05-04 16:39:20 -07:00
mbecker20 4bceb97a66 comment out fields that are just being set to the defautl 2024-05-04 16:25:55 -07:00
mbecker20 8734e6fc4c clean up periphery example config 2024-05-04 16:22:01 -07:00
mbecker20 effd9315cb curl silent 2024-05-04 16:12:54 -07:00
mbecker20 d45f60f604 fix system case 2024-05-04 16:10:30 -07:00
mbecker20 1c7582d0a2 note about root user 2024-05-04 16:05:43 -07:00
mbecker20 566e1090da clearer 2024-05-04 15:46:36 -07:00
mbecker20 a9b3054de3 readme 2024-05-04 15:45:34 -07:00
mbecker20 73d179b355 docs for scripts 2024-05-04 15:45:24 -07:00
mbecker20 97486242a0 setup scripts 2024-05-04 15:43:09 -07:00
mbecker20 a0ddff0618 dashboard 2024-05-04 15:37:19 -07:00
mbecker20 f91e95bf63 readme 2024-05-04 15:35:57 -07:00
mbecker20 431ef82f3e add screenshots 2024-05-04 15:27:02 -07:00
mbecker20 a07bc9fbca make alert details text larger 2024-05-04 15:18:47 -07:00
mbecker20 1e13cd9261 add setup-periphery.py and readme 2024-05-04 15:09:50 -07:00
mbecker20 ae0b59179d version 1.0.0 2024-05-04 15:05:41 -07:00
mbecker20 a9ef12d687 finish api docs 2024-05-04 01:22:52 -07:00
mbecker20 b73c13172a docs 2024-05-04 00:54:54 -07:00
mbecker20 c9b41e7449 server and builder GetAccount includes account in core config 2024-05-03 04:59:16 -07:00
mbecker20 fccc15df4a add docsite (docusaurus v3) 2024-05-03 04:48:18 -07:00
Maxwell BeckerandGitHub 4f7eeacebc Merge pull request #5 from mbecker20/next
merge v1 into main
2024-05-03 04:10:16 -07:00
mbecker20 9b172a833a 1.1.0 2024-05-03 04:08:54 -07:00
mbecker20 fd6fc925d6 core can pass creds to peripheries 2024-05-03 04:06:37 -07:00
mbecker20 6318670b6c implement core pass tokens 2024-05-03 03:50:50 -07:00
mbecker20 7fa5fd83d2 ServerTemplate table 2024-05-03 03:12:49 -07:00
mbecker20 e286acb123 kind of implement server template frontend 2024-05-03 02:51:17 -07:00
mbecker20 ace6dd5a9a implement ServerTemplate api 2024-05-03 02:23:38 -07:00
mbecker20 de70ab5eda rework builder / server 2024-05-03 00:25:46 -07:00
mbecker20 56ab104ac5 frontend implement suggest for extra args 2024-05-02 00:42:43 -07:00
mbecker20 56da5c04f2 add refetch to a lot of important status 2024-05-02 00:14:17 -07:00
mbecker20 3d73f325fe ListCommonExtraArgs 2024-05-02 00:02:59 -07:00
mbecker20 7b778631f3 remove container user param 2024-05-01 23:41:33 -07:00
mbecker20 de4c657868 remove updated_at from ResourceToml 2024-05-01 23:22:19 -07:00
mbecker20 b6df4a08b1 improve export toml endpoint 2024-05-01 23:04:40 -07:00
mbecker20 923c1d6cf6 improve export styling 2024-05-01 22:23:16 -07:00
mbecker20 ff892afa16 add example toml for the configs 2024-04-28 23:24:26 -07:00
mbecker20 3e9e0a9be4 finish docs for config 2024-04-28 18:26:51 -07:00
mbecker20 dc796900cd document core config 2024-04-28 15:41:01 -07:00
mbecker20 b8afd43d07 move config entities to client for docs 2024-04-28 15:16:57 -07:00
mbecker20 ba52ce79fc description trigger placeholder 2024-04-28 14:57:57 -07:00
mbecker20 9936f9f357 fix process args placeholder 2024-04-28 14:56:40 -07:00
mbecker20 677e1a3830 move to sync mutex for action state 2024-04-28 14:44:48 -07:00
mbecker20 d46ff30540 doc 2024-04-28 13:47:47 -07:00
mbecker20 98453580c0 fmt. add procedure webhjook 2024-04-28 04:57:33 -07:00
mbecker20 5683929bbe monrun diffing 2024-04-28 04:33:27 -07:00
mbecker20 ca368340d5 diff resources in sync 2024-04-28 03:56:08 -07:00
mbecker20 e66d2fac95 implement all the diffs 2024-04-28 02:32:18 -07:00
mbecker20 1c74d388dc update partial_derive2 0.3.0 2024-04-28 02:26:09 -07:00
mbecker20 6e698fec05 prep for diffs 2024-04-28 02:22:57 -07:00
mbecker20 d06b2abea4 doccos 2024-04-28 01:04:36 -07:00
mbecker20 e7a4a364c2 rustdoc resource write api 2024-04-27 21:26:19 -07:00
mbecker20 31bcbf36dd finish documenting read api 2024-04-27 21:01:53 -07:00
mbecker20 afbf28668b fix fe 2024-04-27 20:17:27 -07:00
mbecker20 7427a6d6d1 trim down deployment api 2024-04-27 20:16:43 -07:00
mbecker20 fab4e8e534 improve the resource busy locks 2024-04-27 15:09:30 -07:00
mbecker20 0fc6e89ffe docs 2024-04-27 12:20:58 -07:00
mbecker20 9509b23dc1 doc more api 2024-04-27 02:20:09 -07:00
mbecker20 b5ea6d43f3 export to toml work. log scroll button better 2024-04-26 04:52:52 -07:00
mbecker20 92ef0addd5 ResourceToml 2024-04-26 03:09:17 -07:00
mbecker20 a61d50b049 update first 2024-04-26 02:27:29 -07:00
mbecker20 9021f1beea just install ca-certs 2024-04-26 02:23:41 -07:00
mbecker20 f3ecf30b3d install ssl in dockerfile 2024-04-26 02:19:18 -07:00
mbecker20 ea40073fcc mount 2024-04-26 01:55:04 -07:00
mbecker20 ed7e0a38d8 implement toml export 2024-04-26 01:51:45 -07:00
mbecker20 0d8d41f85d use debian:bullseye-slim for core 2024-04-26 01:51:36 -07:00
mbecker20 45bf8ae6b0 pb-12 2024-04-25 23:05:11 -07:00
mbecker20 db9c2d924c standard update text menu 2024-04-23 22:24:43 -07:00
mbecker20 62b34ab9a5 user group toml 2024-04-23 21:26:18 -07:00
mbecker20 85157ddfb9 block non existant resource hook 2024-04-23 21:26:09 -07:00
mbecker20 de746096ab user group sync 2024-04-22 23:38:38 -07:00
mbecker20 f272612e74 clean up logger init 2024-04-22 16:57:36 -07:00
mbecker20 d85bd25ed4 fix fe type 2024-04-22 01:47:54 -07:00
mbecker20 f39c786a64 mount SetUsersInUserGroup 2024-04-22 01:42:39 -07:00
mbecker20 26cae20505 Set user group users whole vec 2024-04-22 01:40:21 -07:00
mbecker20 58a8ebee0c push user to user group with $addToSet for idempotence 2024-04-22 01:23:31 -07:00
mbecker20 5c8adf031c better user group user modify and update permission api 2024-04-22 01:13:59 -07:00
mbecker20 9b168d35d6 works on docs 2024-04-21 23:56:30 -07:00
mbecker20 c4ece715f9 update frontend dockerfile 2024-04-21 23:03:20 -07:00
mbecker20 8e02de909f no use clietn 2024-04-21 23:02:13 -07:00
mbecker20 176b12f18c server stats chart 2024-04-21 19:22:22 -07:00
mbecker20 43514acc92 manage user groups 2024-04-21 17:37:31 -07:00
mbecker20 4894568651 ListApiKeysForServiceUser 2024-04-21 16:22:15 -07:00
mbecker20 f16d079e66 fix fe build 2024-04-21 15:08:33 -07:00
mbecker20 4ed71812a4 rename GetUsers to ListUsers for consistency 2024-04-21 15:01:58 -07:00
mbecker20 577b93e2dc able to query for UserGroup permissions 2024-04-21 14:36:32 -07:00
mbecker20 c676b5168a fmt. fix ws tracing span 2024-04-21 04:28:32 -07:00
mbecker20 4674af2f1b update list item fix username 2024-04-21 04:00:01 -07:00
mbecker20 2429ab050d fix query resource ids for non admin 2024-04-21 03:49:52 -07:00
mbecker20 8698c0f5be non admins able to get procedure updates 2024-04-21 03:22:03 -07:00
mbecker20 c583a5dc62 deployment actions show build if attached 2024-04-21 02:45:04 -07:00
mbecker20 528b74d156 only show actions when user has write or execute 2024-04-21 02:27:15 -07:00
mbecker20 ebedebd761 return write permission for all admin 2024-04-21 02:23:59 -07:00
mbecker20 ee2953b2e9 fix frontend errors 2024-04-21 02:21:49 -07:00
mbecker20 7a2044b395 pass through disabled 2024-04-21 02:07:31 -07:00
mbecker20 3123d021d9 GetPermissionLevel 2024-04-21 01:59:07 -07:00
mbecker20 c46b2cf59d add ListPermissions route 2024-04-21 01:46:01 -07:00
mbecker20 79b4bae40a fix query for user permission on resource 2024-04-21 00:59:30 -07:00
mbecker20 cb9e0ae252 sortable resource table 2024-04-21 00:18:47 -07:00
mbecker20 a7a7d0552b fix permissioning endpoint 2024-04-20 17:37:22 -07:00
mbecker20 01ea85e627 login flow nice 2024-04-20 15:29:12 -07:00
mbecker20 e81be79cb4 update aws deps 2024-04-20 13:06:24 -07:00
mbecker20 fca324480f update serror 2024-04-20 13:04:53 -07:00
mbecker20 762317e08a update deps 2024-04-18 14:57:25 -07:00
mbecker20 6d2f43e40a node 20.12 2024-04-18 04:49:23 -07:00
mbecker20 3823df8362 work on sortable tables 2024-04-18 04:42:32 -07:00
mbecker20 17398fc932 fix tags filter 2024-04-18 03:17:57 -07:00
mbecker20 9b0e96a59a design some improvements 2024-04-18 02:15:33 -07:00
mbecker20 c5fdb914ff refactor RequiredResourceComponents 2024-04-18 01:31:41 -07:00
mbecker20 65ae5d9465 fix ListUserPermissions 2024-04-17 22:58:10 -07:00
mbecker20 c4548f9e7e fix existing frontend for user permissions 2024-04-17 22:56:18 -07:00
mbecker20 86cfb2ebc7 update ts client 2024-04-17 18:25:46 -07:00
mbecker20 3bad049682 implement user group api 2024-04-17 18:19:52 -07:00
mbecker20 5352afee06 api check UserGroup for access 2024-04-17 02:23:41 -07:00
mbecker20 a83dedbcd0 work on docs 2024-04-17 01:30:35 -07:00
mbecker20 beee584cc2 rework / simplify procedure model 2024-04-15 23:17:55 -07:00
mbecker20 ccc7852576 prog on doc entity 2024-04-15 04:31:32 -07:00
mbecker20 0bdb3ddfea alert details use GetAlert 2024-04-15 03:56:54 -07:00
mbecker20 0f2b23bb6c prog on alert pages 2024-04-15 03:29:24 -07:00
mbecker20 a5537a0758 refactor server info 2024-04-14 02:27:47 -07:00
mbecker20 a64723269f update frontend with new stats api 2024-04-14 01:35:38 -07:00
mbecker20 2b93aa3dca protect system info 2024-04-14 01:27:48 -07:00
mbecker20 992054f943 rework / simplify server system stats 2024-04-14 01:22:06 -07:00
mbecker20 784aa754f7 disable stats monitoring on enabled server 2024-04-13 23:53:42 -07:00
mbecker20 5124d3aae8 log search work 2024-04-12 05:29:31 -07:00
mbecker20 0fb746bc03 fix log finally? maybe? 2024-04-12 05:00:17 -07:00
mbecker20 a2d301bfbc SearchLog allow for search Or / And the multiple terms 2024-04-12 04:36:10 -07:00
mbecker20 4523f3e112 writes shouldn't be debug 2024-04-12 03:54:31 -07:00
mbecker20 012cea8fce debug ExchangeForJwt 2024-04-12 03:48:48 -07:00
mbecker20 48a62232a7 skip user on the task instrumentation 2024-04-12 03:29:03 -07:00
mbecker20 46ee857c22 improve insturmentation / serror 2024-04-12 03:07:09 -07:00
mbecker20 7bbd22b4b2 mount the route periphery 2024-04-12 02:05:38 -07:00
mbecker20 862c5b7a7c further improve SearchLog 2024-04-12 01:05:23 -07:00
mbecker20 5eb7e27732 implement aws terminate instance with retry 2024-04-11 23:32:32 -07:00
mbecker20 1231193c89 search log 2024-04-11 22:45:36 -07:00
mbecker20 719938f442 tail docker logs search for some length safety 2024-04-11 22:33:01 -07:00
mbecker20 7b5f2ea69b update styling for light mode 2024-04-11 22:21:47 -07:00
mbecker20 01709deced stop all deployments adds update before finalize / update update 2024-04-11 22:18:27 -07:00
mbecker20 23c87bfaa4 frontend add labels config 2024-04-11 18:36:31 -07:00
mbecker20 0ef8e1861b ContainerSummary contains labels 2024-04-11 17:52:22 -07:00
mbecker20 10b278a141 implement docker tag support 2024-04-11 17:47:58 -07:00
mbecker20 72c884f9ec log elapsed at the end 2024-04-11 17:16:37 -07:00
mbecker20 ecdae0e8df add startup config log 2024-04-11 17:10:51 -07:00
mbecker20 2e67b16ba2 move logs outside of tokio spawn 2024-04-11 04:41:31 -07:00
mbecker20 18d31235d4 PeripheryRequest is debug 2024-04-11 03:55:06 -07:00
mbecker20 4f8c150c0b add deployment table to build page 2024-04-11 03:41:54 -07:00
mbecker20 f26c937747 finish instrumenting 2024-04-11 03:37:57 -07:00
mbecker20 34176c336e config examples 2024-04-11 02:49:10 -07:00
mbecker20 635f3678ef enable otlp exporting to url 2024-04-11 02:45:56 -07:00
mbecker20 12bd8cc265 skip user capture in tracing span 2024-04-11 01:22:02 -07:00
mbecker20 64316a8a61 update merge config files 2024-04-11 00:51:49 -07:00
mbecker20 b85c3b25f7 fix auth log spam 2024-04-11 00:43:01 -07:00
mbecker20 144344bcfc full env core configuration 2024-04-11 00:15:05 -07:00
mbecker20 7736ba8999 core and periphery both env overrides 2024-04-10 23:08:28 -07:00
mbecker20 90c7bd56bf version before repo 2024-04-10 22:53:10 -07:00
mbecker20 714edd70fb lame 2024-04-10 22:52:12 -07:00
mbecker20 9c31813a16 fix logger with global subscriber 2024-04-10 22:48:52 -07:00
mbecker20 d6b76134a3 update config examples 2024-04-10 22:24:40 -07:00
mbecker20 b7692e39c8 add log config to core and periphery config 2024-04-10 22:14:54 -07:00
mbecker20 60b5179b3e add json and loki logging options 2024-04-10 22:10:24 -07:00
mbecker20 46a1c86cb6 implement logger with loki support 2024-04-10 21:34:13 -07:00
mbecker20 393363b33e instrument most of core 2024-04-10 20:15:11 -07:00
mbecker20 e762363d96 add tracing to core client websocket subscription 2024-04-10 19:00:07 -07:00
mbecker20 5d2082b478 add tracing spans to periphery 2024-04-10 18:23:35 -07:00
mbecker20 ad09fd81b4 improve logging 2024-04-10 05:57:16 -07:00
mbecker20 54fdbf9fd0 one line logging 2024-04-10 04:13:41 -07:00
mbecker20 8c3de939da core serves the frontend 2024-04-10 01:39:26 -07:00
mbecker20 2f3a3f8f23 log on one line 2024-04-10 00:56:15 -07:00
mbecker20 daf13d693d imrpove tags config 2024-04-10 00:43:52 -07:00
mbecker20 bbd5384589 improve dashboard 2024-04-10 00:09:52 -07:00
mbecker20 fb72bbf81e fix short date formatting 2024-04-09 23:56:47 -07:00
mbecker20 29edd6b9b5 add set title hook to pages 2024-04-09 23:53:30 -07:00
mbecker20 215b35575d improve dark mode styling 2024-04-09 23:36:38 -07:00
mbecker20 6394275570 improve serverunreachable alerting behavior 2024-04-08 15:53:44 -07:00
mbecker20 eaca72991b alert logger 2024-04-08 05:47:39 -07:00
mbecker20 634e895469 fix default PORT 2024-04-08 02:19:25 -07:00
mbecker20 77c8033d22 only show redeploy on build if image type if Build 2024-04-08 01:43:26 -07:00
mbecker20 7508ae21b8 websocket show real connected 2024-04-08 01:13:56 -07:00
mbecker20 fd90a62af1 fix auto redeploy service user 2024-04-07 22:50:36 -07:00
mbecker20 707dd682ed override api host with build arg 2024-04-07 22:29:45 -07:00
mbecker20 7396988032 add frontend PORT override 2024-04-07 22:09:06 -07:00
mbecker20 58960cdc6e style 2024-04-07 21:59:42 -07:00
mbecker20 31a42dce7e new resource name reset on close 2024-04-07 21:58:13 -07:00
mbecker20 9b248a8fa4 clean up NewResource 2024-04-07 21:54:48 -07:00
mbecker20 f099e5c6b7 config alerter enabled 2024-04-07 21:26:25 -07:00
mbecker20 5c093c81ab enable / disable alerters backend 2024-04-07 21:23:51 -07:00
mbecker20 e73146533a GetCoreInfo give github webhook base url 2024-04-07 21:02:10 -07:00
mbecker20 db1237184f repo pull add latest commit hash log 2024-04-07 20:56:33 -07:00
mbecker20 1e5ed1d29e fix repo list item extra info 2024-04-07 17:37:19 -07:00
mbecker20 d68ea2c28f add repo info 2024-04-07 17:23:34 -07:00
mbecker20 9700ab2cb6 show / set description on resources 2024-04-07 16:53:24 -07:00
mbecker20 d8321c873e rename confirm button 2024-04-07 16:23:55 -07:00
mbecker20 44784487a0 consolidate Resource components 2024-04-07 16:08:23 -07:00
mbecker20 76471fa694 go back to resource type list on resource delete 2024-04-07 15:32:22 -07:00
mbecker20 6ec7b4305c add alerts to other pages 2024-04-07 06:10:33 -07:00
mbecker20 896a344ac7 add more resource 2024-04-07 05:35:57 -07:00
mbecker20 34cefcdaf6 frontend build work 2024-04-07 04:55:03 -07:00
mbecker20 4c8eb68611 add reason (err) server unreachable in alert 2024-04-07 04:52:58 -07:00
mbecker20 50866659ea overide signals 2024-04-07 04:09:42 -07:00
mbecker20 8262cb858e look into deployment term signal 2024-04-07 03:40:02 -07:00
mbecker20 e710317cac deployment log show ansi colors 2024-04-07 02:54:49 -07:00
mbecker20 138cf781f3 improve procedure update logs 2024-04-07 02:31:14 -07:00
mbecker20 70d315b2d7 remove nav actually 2024-04-07 02:13:55 -07:00
mbecker20 bca8ca52da navigate on table row click 2024-04-07 02:11:32 -07:00
mbecker20 42c769ed56 fix only show version if non none 2024-04-07 02:00:17 -07:00
mbecker20 592af39550 service user detection 2024-04-07 01:51:22 -07:00
mbecker20 79620030bc alert / update logger resources 2024-04-07 00:54:04 -07:00
kv 294bc8712b fix recents on safari 2024-04-06 19:41:39 -07:00
mbecker20 f75d30d8ce resource updates page open details 2024-04-06 05:41:26 -07:00
mbecker20 de81e1e790 backend resolve server alerts before deleting server 2024-04-06 04:32:10 -07:00
mbecker20 450f5c45a1 server stats 2024-04-06 04:23:28 -07:00
mbecker20 b864b32cb2 basic server stats 2024-04-06 03:58:40 -07:00
mbecker20 0d13ac8f38 start server stats 2024-04-06 03:31:17 -07:00
mbecker20 edd517e21c add git clone and pull 2024-04-06 03:17:19 -07:00
mbecker20 32d356600a fix server actions 2024-04-06 03:07:09 -07:00
mbecker20 9e290278d0 add Danger zone (delete + copy) 2024-04-06 02:56:41 -07:00
mbecker20 4140dcb9dc manage build version 2024-04-06 02:07:17 -07:00
mbecker20 1ed3d31011 alert details 2024-04-06 01:54:20 -07:00
mbecker20 3915f921f1 builder config 2024-04-04 22:17:00 -07:00
mbecker20 050571196c alerter 2024-04-04 22:03:24 -07:00
mbecker20 3c1a129ac9 repo config 2024-04-04 02:27:00 -07:00
mbecker20 57a3561aa8 finish build config 2024-04-04 01:45:10 -07:00
mbecker20 ec37bfc0c6 all server config 2024-04-03 01:30:05 -07:00
mbecker20 82387e95da periphery secrets in dep env working 2024-04-03 01:24:13 -07:00
mbecker20 36b018151d periphery secrets visible 2024-04-03 00:59:47 -07:00
mbecker20 b4754b64d5 improve PruneAll using docker system prune -a -f 2024-04-03 00:28:58 -07:00
mbecker20 3a5530a186 fix frontend 2024-04-01 04:31:17 -07:00
mbecker20 ee22044b34 add service user replacement in procedure 2024-04-01 04:18:19 -07:00
mbecker20 8f5570128d improve topbar navigation 2024-04-01 02:28:51 -07:00
mbecker20 24d2e744a4 actions 2024-03-31 23:20:13 -07:00
mbecker20 bc9877133c smth 2024-03-31 22:41:40 -07:00
mbecker20 05886bed71 fix update details too thin 2024-03-31 13:33:31 -07:00
mbecker20 c882c12890 fix combo box 2024-03-31 13:23:05 -07:00
mbecker20 12647896c4 update shadcn 2024-03-31 12:56:22 -07:00
mbecker20 ebbec7d68c clean up resource links 2024-03-31 12:24:47 -07:00
mbecker20 cf054395bb improve info 2024-03-31 12:04:36 -07:00
mbecker20 8c04cf3db2 finish standard fmt 2024-03-31 10:32:45 -07:00
mbecker20 516690b260 standardize coloring 2024-03-31 10:29:21 -07:00
mbecker20 fc602054ba add state 2024-03-31 09:39:16 -07:00
mbecker20 e2244429ce add repo to build list item 2024-03-30 18:56:24 -07:00
mbecker20 b60ac6e1be favicon and port 2024-03-30 18:37:14 -07:00
mbecker20 6999fb8c2a fix google scopes 2024-03-30 18:22:31 -07:00
mbecker20 fd84b5920b cleanup 2024-03-30 18:05:04 -07:00
mbecker20 d02df02bbe manage users 2024-03-30 18:04:45 -07:00
mbecker20 1f143b814e ListUserPermissions 2024-03-30 15:45:07 -07:00
mbecker20 65700ad70e login looking good 2024-03-30 14:42:20 -07:00
mbecker20 6a16f1344a oauth login should work 2024-03-30 14:37:55 -07:00
mbecker20 3ecacc69a5 update useUser 2024-03-30 04:45:10 -07:00
mbecker20 9db2e858d2 frotnend 2024-03-30 04:34:09 -07:00
mbecker20 f8cdf6bf45 update ts 2024-03-30 04:17:24 -07:00
mbecker20 1b97d85023 move GetUser to auth api. Doesn't require user enabled to call 2024-03-30 04:16:04 -07:00
mbecker20 74a5f429e9 resource query tags match on name or id, All or Any mode 2024-03-30 01:55:30 -07:00
mbecker20 7554055767 api sanitize update tags api with name->id replacement, tag auto create 2024-03-29 21:55:10 -07:00
mbecker20 f617f91d96 fix tags update validate 2024-03-29 21:05:53 -07:00
mbecker20 7b95e6b276 more logs use serror 2024-03-29 06:24:56 -07:00
mbecker20 1510ed2147 do stuff 2024-03-29 03:35:22 -07:00
mbecker20 f8237217b0 fix incorrect resource type 2024-03-29 03:19:05 -07:00
mbecker20 5f95fe16fd procedure working 2024-03-29 02:34:15 -07:00
mbecker20 cf8fd893fa getting there 2024-03-28 06:31:39 -07:00
mbecker20 1032629800 fix validate and prevent recurse a bit 2024-03-28 04:27:49 -07:00
mbecker20 12576711fa vailidate UpdateProcedure config 2024-03-28 04:18:37 -07:00
mbecker20 233c8085b5 work on procedure config 2024-03-28 04:13:53 -07:00
mbecker20 1b1650eba4 sync working clean 2024-03-27 06:35:57 -07:00
mbecker20 73c17c68c4 fix 2024-03-27 05:54:40 -07:00
mbecker20 3492eb3126 validate 2024-03-27 05:54:15 -07:00
mbecker20 6dcc4b30de validate attached resources by name / id 2024-03-27 05:33:34 -07:00
mbecker20 a5e15f9c5e fix the type change 2024-03-27 04:18:57 -07:00
mbecker20 851c1f450c update procedure 2024-03-27 03:59:51 -07:00
mbecker20 fd12921f6d refactor StateResource 2024-03-27 03:20:08 -07:00
mbecker20 1100e160de impl procedure monrun 2024-03-27 00:48:43 -07:00
mbecker20 bfcdf011c4 change default periphery port to 8120 2024-03-26 23:37:55 -07:00
mbecker20 48ff1ebefa monrun sync work 2024-03-26 04:42:24 -07:00
mbecker20 f1c9d05abc resources sync ready for test 2024-03-26 04:25:00 -07:00
mbecker20 73217c9178 change to tags. begin test monrun 2024-03-26 02:42:45 -07:00
mbecker20 7c5acb8c21 api for service users 2024-03-26 01:09:54 -07:00
mbecker20 10662ec679 use enum for UserConfig 2024-03-25 23:49:35 -07:00
mbecker20 65aba12dd0 permissions table 2024-03-25 23:19:08 -07:00
mbecker20 8d1410b181 more resource permissions to own table 2024-03-25 20:03:10 -07:00
mbecker20 d9fbccb644 guard local user empty username 2024-03-25 18:09:34 -07:00
mbecker20 c9334074f6 fix show updates 2024-03-25 16:34:15 -07:00
mbecker20 f4b77598c3 add updates page basic 2024-03-25 08:04:30 -07:00
mbecker20 478a046074 fix build cancel 2024-03-25 07:24:51 -07:00
mbecker20 c4cb1f9c66 update ts types 2024-03-25 06:54:32 -07:00
mbecker20 f84a3a9034 improve build cancel 2024-03-25 06:53:27 -07:00
mbecker20 fa389515cd dont show save if no change 2024-03-25 06:29:08 -07:00
mbecker20 06c480ef00 wrap table in section 2024-03-25 06:24:19 -07:00
mbecker20 71dd07ac28 add deployment table to server 2024-03-25 06:19:34 -07:00
mbecker20 30f15cf7e8 fix frontend build issue 2024-03-25 06:07:09 -07:00
mbecker20 cc99e91935 resource tags look better 2024-03-25 05:59:02 -07:00
mbecker20 6544c1887a implement redirect oauth 2024-03-25 05:11:01 -07:00
mbecker20 9636d4d347 build table tags 2024-03-25 04:49:21 -07:00
mbecker20 c7ce80c5e3 cancel build 2024-03-25 04:41:47 -07:00
mbecker20 5d0050535d all the dashboards 2024-03-25 04:00:37 -07:00
mbecker20 340d013bb3 deleting tags deletes across 2024-03-25 01:14:45 -07:00
mbecker20 f6c99c4c20 resource type dropdown handle keys and tree 2024-03-24 19:08:55 -07:00
mbecker20 7c6eecb0e9 manage api keys 2024-03-24 18:39:08 -07:00
mbecker20 59b09e580e api key page 2024-03-24 17:33:09 -07:00
mbecker20 4174eebffe TagsWithBadge 2024-03-24 16:07:52 -07:00
mbecker20 200aefac54 remove RequestUser 2024-03-24 15:44:48 -07:00
mbecker20 b200088093 monrun sync 2024-03-24 06:35:56 -07:00
mbecker20 8669ed8c73 need to add back async db 2024-03-24 05:14:52 -07:00
mbecker20 8a96724247 fix unused import 2024-03-24 04:40:30 -07:00
mbecker20 3a913fba44 fix frontend build 2024-03-24 04:35:18 -07:00
mbecker20 05a08d8640 run resource up 2024-03-24 04:26:45 -07:00
mbecker20 2bea16d003 parse resource files 2024-03-24 03:51:07 -07:00
mbecker20 475f0438f9 remove the await on tram_db call 2024-03-24 02:28:02 -07:00
mbecker20 c9720c15b9 extract periphery client lib from bin 2024-03-20 18:14:54 -07:00
mbecker20 0232fc1c2c update deps, remove db_client crate 2024-03-20 17:27:54 -07:00
mbecker20 9d5550bf5f default log level to logger::Level 2024-03-20 16:04:55 -07:00
mbecker20 873d9c2df6 remove more impl on State 2024-03-19 05:32:38 -07:00
mbecker20 5266b01e4c refactor core to use global &'statics 2024-03-19 05:18:42 -07:00
mbecker20 12315e90de clean up periphery 2024-03-19 02:12:04 -07:00
mbecker20 c32905cca4 support enable / disable components of sequence / parallel procedure 2024-01-21 15:43:46 -08:00
kv 71571e2625 update tags in deployment table 2024-01-17 00:45:19 -08:00
kv 25eb29946b update resource updates UI 2024-01-17 00:45:14 -08:00
kv bb98d3209d clear input when opening tags dropdown 2024-01-17 00:12:58 -08:00
kv 73f624d6a1 invalidate list tags when creating a tag 2024-01-17 00:09:52 -08:00
kv d1f8c130a1 fix tags behaviour 2024-01-17 00:01:24 -08:00
kv 93e16c4b7c tags ui 2024-01-16 11:40:52 -08:00
mbecker20 ee91d1d83e add use public id to build log 2024-01-16 03:33:35 -08:00
mbecker20 46d408056c add use_public_ip under builder config 2024-01-16 03:30:39 -08:00
mbecker20 d8ff64c1d9 difference between assign and use public ip 2024-01-16 03:25:57 -08:00
kv 453600a70c init tags 2024-01-16 02:43:59 -08:00
kv 597e466d84 update ts types 2024-01-16 02:43:56 -08:00
kv 65164bd8ef update ui components 2024-01-16 02:43:49 -08:00
kv dbf589da91 update tags api 2024-01-16 02:43:41 -08:00
mbecker20 0857cbfa92 update serror and rustc build version 2024-01-16 02:20:40 -08:00
mbecker20 225edce50a update serror to 0.1.6 2024-01-15 12:09:15 -08:00
mbecker20 5893fdefaf remove line from log 2024-01-15 01:57:11 -08:00
mbecker20 2b4ebd6e10 implement tracing 2024-01-15 01:29:26 -08:00
mbecker20 f97e48e886 comment out recently viewed 2024-01-15 01:03:13 -08:00
mbecker20 b788bc6b6a comment out recently viewed 2024-01-15 01:00:15 -08:00
mbecker20 8c91b01dd9 fix up the tables 2024-01-15 00:56:40 -08:00
kv 30b6dac7dd improve Icon 2024-01-14 14:09:00 -08:00
kv b6ec89e4aa merge kv changes 2024-01-14 13:57:37 -08:00
mbecker20 39a0fcb358 update deps and fix react query mutate isLoading -> isPending 2024-01-14 13:36:22 -08:00
mbecker20 9d353806a3 make some prog on the row data 2024-01-14 06:28:18 -08:00
mbecker20 d24f8d5c7c add deployment filtering by build id 2024-01-14 05:43:01 -08:00
mbecker20 cd7d51a16b update derive_default_builder 2024-01-14 04:30:10 -08:00
mbecker20 d438fbba49 builders for the resource queries 2024-01-14 03:19:12 -08:00
mbecker20 d73c71e18b fix typeshare error 2024-01-13 18:10:14 -08:00
kv 3f4d1983e1 improve some udpates stuff 2024-01-13 17:23:18 -08:00
kv 1c87ac0546 various 2024-01-13 17:16:51 -08:00
mbecker20 a11aa5c751 add created_at to ListItem 2024-01-13 17:16:29 -08:00
kv 5cae0b99c7 i fixed everything 2024-01-13 14:25:16 -08:00
mbecker20 58d0b6b458 implement new list api 2024-01-13 14:05:27 -08:00
mbecker20 4815d225d7 AddFilters for all resource queries 2024-01-13 13:51:04 -08:00
kv fd487350f5 update ws login message 2024-01-13 13:42:26 -08:00
kv dafcf22d49 fix ts types 2024-01-13 13:40:17 -08:00
kv 78cefe19bd update ts client 2024-01-13 13:40:14 -08:00
mbecker20 bbca105077 implement ResourceQuery 2024-01-13 13:10:33 -08:00
mbecker20 e3e4278206 sanitize the api keys 2024-01-13 01:12:58 -08:00
mbecker20 e479e62cce implement ListApiKeys 2024-01-13 00:44:05 -08:00
mbecker20 8f73b08fbf update logger 2024-01-12 23:50:38 -08:00
mbecker20 5d02a8874f client ws again 2024-01-12 23:49:50 -08:00
mbecker20 2ec5789d71 ws login support api keys 2024-01-12 23:40:47 -08:00
mbecker20 1c7a159e40 periphery use AppError 2024-01-08 03:13:10 -08:00
mbecker20 81a4caf23c update auth 2024-01-08 03:07:27 -08:00
kv 9065b6034b child procedures 2024-01-07 18:55:10 -08:00
kv 49104922c1 fix procedure selectors 2024-01-07 18:49:46 -08:00
kv 409e064452 start permissions UI etc 2024-01-07 18:28:56 -08:00
mbecker20 61f7efaa85 inserted_id as_object_id first before to_string 2024-01-07 15:57:34 -08:00
mbecker20 f0baa7496f stop log if fail to record server stats 2024-01-07 15:23:53 -08:00
mbecker20 7ed115cddb CRUD for procedures 2024-01-07 14:54:57 -08:00
mbecker20 cb6dc29469 get procedure action state 2024-01-07 14:48:20 -08:00
mbecker20 44032e2a9e Execution type None 2024-01-07 14:44:09 -08:00
mbecker20 7390a9421d gen types 2024-01-07 14:19:14 -08:00
mbecker20 f1cbe6fba9 replace ProcedureConfigVariant 2024-01-07 14:18:54 -08:00
mbecker20 5925cf5cc9 fix runfile 2024-01-07 14:17:49 -08:00
mbecker20 219a914cb1 update ts client 2024-01-07 14:15:48 -08:00
kv 6b6d6337c8 fix action type 2024-01-07 14:09:34 -08:00
kv c511ae09a1 add stashed frontend updates 2024-01-07 13:50:05 -08:00
mbecker20 e658cb3aa0 procedure execution api 2024-01-07 01:12:50 -08:00
mbecker20 9f4cf475b6 move types into client 2024-01-06 19:44:29 -08:00
mbecker20 af53cbebed update axum to 0.7 2024-01-06 18:56:52 -08:00
mbecker20 1895ebcf25 update to sysinfo 0.30 2024-01-06 17:26:44 -08:00
mbecker20 02a313d70b move back to /frontend 2024-01-06 15:20:29 -08:00
mbecker20 57ed905140 rename frontend-v2 to frontend 2024-01-06 15:16:24 -08:00
mbecker20 d46741c5ae stricly handle unknown instance type 2024-01-06 15:15:08 -08:00
mbecker20 ba3692e085 update to mungos 0.5 2024-01-06 14:24:03 -08:00
mbecker20 593cad65dd update runfile 2023-11-26 12:44:58 -05:00
mbecker20 8bd05144da update api name 2023-11-03 01:16:56 -04:00
mbecker20 899ebcd681 update default monitor api url 2023-11-03 00:52:28 -04:00
mbecker20 f4917762c0 migrator finished 2023-10-23 02:20:53 -04:00
mbecker20 88c35281bf reformat to 2 spaces for tab 2023-10-23 01:46:29 -04:00
mbecker20 7e1810a0a7 implement conversion from legacy -> next for build, deployment, server 2023-10-22 14:44:38 -04:00
mbecker20 7eb62de74b control type of alerts that are enabled 2023-10-15 02:50:23 -04:00
mbecker20 69bb7ef1fd stop all containers on server action 2023-10-09 21:57:11 -04:00
mbecker20 57f0404a02 option to disable send_alerts on various servers + deployments 2023-10-09 21:14:50 -04:00
mbecker20 d8dccda1c0 update GetAvailableAccounts method name 2023-10-09 08:40:01 -04:00
mbecker20 16f3c4190d frontend use correct call for GetDockerNetworks 2023-10-09 00:41:02 -04:00
mbecker20 823878e963 add Read, Write, Execute traits on requests 2023-10-08 16:00:58 -04:00
mbecker20 f4246e3e0a terminate aws instance if fail to connect 2023-09-30 20:28:33 +03:00
mbecker20 9a8730a832 improve start aws builder log 2023-09-30 16:33:22 +03:00
kv 31d01aef11 header updates and resource updates show status better 2023-09-16 15:00:50 -07:00
mbecker20 a61da39038 fix build auto increment 2023-09-16 16:12:48 -04:00
kv 7b9def2aeb more permissions stuff 2023-09-15 13:46:44 -07:00
mbecker20 92b8cc9f6b tests cargo toml 2023-09-15 03:09:11 -04:00
kv d3d5f7a745 invalidate update details on new update msg wiht same id 2023-09-14 12:27:31 -07:00
mbecker20 be78e4c48a add get users route (admin only) 2023-09-14 04:19:44 -04:00
karamvir be9937355b hide permissions when only admins 2023-09-12 22:28:10 -07:00
karamvir f1d36f0f4a fix version selector etc 2023-09-12 16:22:29 -07:00
kv 2a3f223a2b init repo config 2023-09-12 14:24:38 -07:00
karamvir 21401c544d add resource permissions 2023-09-12 13:14:09 -07:00
karamvir 6ceb7404bb slight signup 2023-09-11 23:01:34 -07:00
karamvir a60d2e7f0f fix for build 2023-09-11 16:37:08 -07:00
karamvir 4480eff46d fix resources page responsive 2023-09-11 09:45:35 -07:00
karamvir b265bd68b3 responsive header hotfix 2023-09-11 09:44:52 -07:00
karamvir 9e47eb3470 update header dropdowns 2023-09-11 09:34:51 -07:00
karamvir a050f419e4 cleanup 2023-09-11 00:36:50 -07:00
kv d1373aa5b3 add resource icon to dropdown 2023-09-11 00:28:43 -07:00
kv c53704849a fix resource page header 2023-09-11 00:04:39 -07:00
kv e27a25b147 cleanup type imports 2023-09-10 23:41:47 -07:00
karamvir b1a88a9c2d add row mode to resources page 2023-09-10 22:23:53 -07:00
karamvir 780fd0490e improve styles, add notif dot for unseen updates 2023-09-09 14:11:11 -07:00
karamvir b3d0ee7080 add home option to omnibar 2023-09-09 13:27:57 -07:00
karamvir 6d2287c4e5 force scrollbar, add header updates etc 2023-09-09 13:22:13 -07:00
karamvir 8ae8c43c3c cleanup 2023-09-09 04:39:27 -07:00
karamvir 2a18321225 redesign header slight 2023-09-09 04:14:28 -07:00
karamvir 2f67e4de94 improve invalidations etc 2023-09-09 03:50:51 -07:00
karamvir 84c6af1ee9 more cleanup and refactor 2023-09-09 03:46:32 -07:00
karamvir caae39b2de cleanup 2023-09-09 03:25:51 -07:00
karamvir 2af30856ba refactor resources etc 2023-09-09 03:24:55 -07:00
karamvir a85e842911 plenty more configs etc 2023-09-09 03:16:37 -07:00
karamvir 2f9805e97b refactor alerter 2023-09-09 03:09:06 -07:00
karamvir 2c66b9ecc5 new resource, slight cleanup etc 2023-09-09 02:30:09 -07:00
karamvir 35e5f8928a make charts clickable 2023-09-09 01:48:02 -07:00
mbecker20 4c647db584 refetch list deployments 2023-09-09 04:29:53 -04:00
karamvir e523ea0cc3 lockfile 2023-09-09 01:18:55 -07:00
karamvir 404343e5e7 fix copy 2023-09-09 01:00:46 -07:00
karamvir 27f5353ee6 init frontend v2 2023-09-09 00:47:46 -07:00
karamvir 848fd4d4c8 fix node version 2023-09-07 04:44:16 -07:00
karamvir 2f58bf2dd1 fix button intent 2023-09-07 04:33:13 -07:00
karamvir dbe32056d0 update some components, maybe fix invalidations? 2023-09-07 04:27:56 -07:00
karamvir c88e210136 init new shadcn cli 2023-09-06 20:36:18 -07:00
mbecker20 c002ba2f00 update deps 2023-09-05 03:44:01 -04:00
mbecker20 a8c076f2c9 fmt 2023-09-04 02:57:46 -04:00
mbecker20 99da264f31 update api host 2023-09-02 16:37:18 -04:00
mbecker20 6c862be9b9 fix update server 2023-08-29 23:56:10 -04:00
mbecker20 6c75d64b5d fix copy build / deployment to enforce to_monitor_name 2023-08-29 23:51:02 -04:00
mbecker20 bf59390f68 slow reconnect 2023-08-29 23:46:59 -04:00
karamvir 406cfaefef cleanup 2023-08-29 20:07:27 -07:00
karamvir 1a1919f38c fuck me 2023-08-29 20:04:28 -07:00
mbecker20 3d99c300a4 rename server 2023-08-29 22:50:55 -04:00
karamvir 1a63be7746 rename server, deployment 2023-08-29 19:31:58 -07:00
mbecker20 ae7e50396e fix config parse error 2023-08-29 22:30:33 -04:00
mbecker20 f7ffb41dea server name on DeploymentStateChange 2023-08-29 02:27:53 -04:00
mbecker20 1e6987a229 send message on connect 2023-08-29 02:09:00 -04:00
mbecker20 d0bc5caebf wrap env values in quotes 2023-08-29 02:06:48 -04:00
mbecker20 59c7481fd7 add update logger dockerfile 2023-08-29 01:59:05 -04:00
mbecker20 70a11de316 monitor client update ws subscription with reconnect 2023-08-29 01:57:42 -04:00
mbecker20 3da88135c2 prune state and alerts based on config 2023-08-28 02:33:27 -04:00
mbecker20 d2a706fd9d properly forward periphery trace into core error trace 2023-08-27 13:59:59 -04:00
mbecker20 8f57af0667 uniform alert ts 2023-08-27 02:40:27 -04:00
mbecker20 cb46029f35 dont call create many on empty alerts 2023-08-27 02:24:24 -04:00
mbecker20 e35c63ff5d alert logger needs 1.71.1 2023-08-27 02:21:16 -04:00
mbecker20 440d54f500 use rust 1.71.1 to build 2023-08-27 06:13:35 +00:00
mbecker20 f4a78ef397 workspace resolver 2 2023-08-27 06:02:37 +00:00
mbecker20 96831e5973 update list alert api to take mongo document query 2023-08-27 01:54:55 -04:00
mbecker20 c5f9cc104c create deployment status alerts on db 2023-08-27 01:45:53 -04:00
mbecker20 dc6c391798 implement serror for core and periphery errors 2023-08-27 01:36:19 -04:00
mbecker20 80e5879c43 stop requests to disabled periphery 2023-08-27 01:07:59 -04:00
mbecker20 d9864f31c1 GetCoreInfo api 2023-08-22 00:08:08 -04:00
mbecker20 75b0d25d3e fix include resolved 2023-08-21 03:41:29 -04:00
mbecker20 625de2e38e resolved shoudl be tru 2023-08-21 03:40:40 -04:00
mbecker20 0f7d64350f alert logger 7000. fix alert open when empty 2023-08-21 03:21:42 -04:00
mbecker20 63620f246b update startup log 2023-08-21 03:17:40 -04:00
mbecker20 f416d628ae alert logger 2023-08-21 02:55:13 -04:00
mbecker20 24bf642dfa fix ts 2023-08-21 02:42:33 -04:00
mbecker20 8a0321bf67 alerting should work 2023-08-21 02:40:52 -04:00
mbecker20 5e033e1f76 handle cpu and mem alerts 2023-08-20 22:41:49 -04:00
mbecker20 ec47fa42b8 ListAlerts api 2023-08-20 17:16:20 -04:00
mbecker20 080ecf9fd9 prog on monitoring 2023-08-20 04:29:55 -04:00
mbecker20 f0deda32dc prog on alerting 2023-08-20 03:55:30 -04:00
mbecker20 7b3298e9e3 update aws sdk 2023-08-18 18:06:58 +00:00
mbecker20 f26661459d format periphery request error 2023-08-18 18:04:53 +00:00
mbecker20 b4c0047d45 prog on alerting 2023-08-18 03:12:18 -04:00
karamvir 4e03cf9675 add refresh to logs 2023-08-17 21:03:33 -07:00
karamvir 33eb5fc020 reduce config button gap 2023-08-17 21:03:29 -07:00
karamvir 01d62a6a15 shrink omniar on mobile 2023-08-17 21:03:06 -07:00
karamvir bae22e0104 update favicon 2023-08-17 21:02:40 -07:00
karamvir 33b49d46ce add standalone display mode 2023-08-17 20:38:48 -07:00
karamvir c6beda1b8f add pwa icons 2023-08-17 20:38:08 -07:00
karamvir 8faba6ec5b init manifest 2023-08-17 19:47:41 -07:00
karamvir e2824da846 update builder config 2023-08-17 19:00:12 -07:00
karamvir b4dcadbf17 add docker accounts and github accounts to builder config 2023-08-17 18:18:30 -07:00
karamvir e96e1ebb9c update configs 2023-08-17 17:38:49 -07:00
karamvir b59158d314 split server warnigs by type 2023-08-17 17:24:19 -07:00
karamvir 82588a0f83 split configs into cards within each tab 2023-08-17 17:17:04 -07:00
karamvir c6c91b6b11 add keys to auto config components 2023-08-17 16:59:29 -07:00
karamvir a8918156f6 cleanup some styles etc 2023-08-17 16:52:06 -07:00
karamvir df56123ceb upgrade server stats to shadcn progress 2023-08-17 16:34:11 -07:00
karamvir 76d331ef03 re-cast to any to ensure build 2023-08-17 15:38:02 -07:00
karamvir 71524b2073 cleanup 2023-08-17 15:34:51 -07:00
karamvir f286efb174 ensure proper number handling by configinput 2023-08-17 15:34:44 -07:00
karamvir feea9384c1 add security group ids 2023-08-17 15:31:02 -07:00
karamvir 7dfcc9a3b6 update to consts 2023-08-17 15:05:47 -07:00
karamvir 43efd8e60b remove any cast 2023-08-17 15:05:36 -07:00
karamvir 28fce80476 upgrade env component 2023-08-17 15:05:26 -07:00
karamvir cf4c4664e1 rm console log 2023-08-17 15:05:19 -07:00
karamvir 9a8b2a308d integrate action state to deployment 2023-08-17 15:04:59 -07:00
karamvir 188a70de21 rm conditonal hook call, make consistent 2023-08-17 15:04:43 -07:00
karamvir 5fccd1064f improve types 2023-08-17 15:03:58 -07:00
karamvir 9f58943dfc improve types, remove any cast 2023-08-17 15:03:43 -07:00
karamvir 9111f8b8c7 provide loader for deployment actions 2023-08-17 15:03:28 -07:00
karamvir 89dba2dbc0 improve recently viewed to avoid calling conditionally 2023-08-17 15:03:12 -07:00
karamvir 0b79f125ed fix confirm button onclick behaviour 2023-08-17 10:41:07 -07:00
karamvir 59bc429ce5 Merge branch 'next' of https://github.com/mbecker20/monitor into next 2023-08-17 10:36:05 -07:00
karamvir 46db31c695 upgrade environment to textarea 2023-08-17 10:36:02 -07:00
karamvir c45a617a90 pass classname to config items 2023-08-17 10:34:43 -07:00
karamvir 2982ac051f cleanup main 2023-08-17 10:34:25 -07:00
karamvir a6b1b385e5 always toast write and exec fails 2023-08-17 10:33:53 -07:00
karamvir 3f8c62c1a4 defer invalidation by 100ms 2023-08-17 10:33:08 -07:00
mbecker20 e31443b285 1.0.1 2023-08-17 01:36:11 -04:00
mbecker20 10beeab4b5 progress on alerting 2023-08-16 23:31:23 -04:00
karamvir a5fdfc3b67 add log tails 2023-08-16 09:30:11 -07:00
karamvir 73d0e2589b add process args and extra args 2023-08-16 08:45:15 -07:00
karamvir 2c6d2a30d7 add volumes, fix double inputs, etc 2023-08-16 08:34:03 -07:00
karamvir d0566bf336 add placeholders to doubl input, fix ports congi 2023-08-16 08:14:42 -07:00
karamvir e93e00f4f7 fix restart and network 2023-08-16 07:55:44 -07:00
karamvir 720252f6ae add keys to tabs 2023-08-16 07:55:37 -07:00
karamvir 43ee9b05a3 fix restart mode selector values, and format names 2023-08-16 07:49:36 -07:00
karamvir bcfb847412 rm old config stuff 2023-08-15 15:17:00 -07:00
karamvir 402a7a730d Merge branch 'next' of https://github.com/mbecker20/monitor into next 2023-08-15 14:26:20 -07:00
karamvir 5e975a6acd major cleanup and refactor 2023-08-15 14:26:15 -07:00
mbecker20 f1639126df work on alerting logic 2023-08-13 01:54:14 -04:00
karamvir 7aa048a512 refactor accounts selector 2023-08-12 16:39:36 -07:00
karamvir 76b958ed89 add accounts selectors for github and docker 2023-08-12 16:37:39 -07:00
karamvir d0c8e0bb49 modify to generic account selector, and enable docker accounts 2023-08-12 16:16:25 -07:00
karamvir 7f1df2d24c add github account selector 2023-08-12 16:12:12 -07:00
mbecker20 7331fdc083 move some files around 2023-08-12 01:59:57 -04:00
karamvir 980d675572 cast to any to prevent awful recursive type 2023-08-11 18:08:53 -07:00
karamvir 749df9e554 add image type selector for depl config 2023-08-11 18:06:13 -07:00
karamvir 7bb97dadf4 move config etc 2023-08-11 01:38:56 -07:00
karamvir a223357ef1 more cleanup 2023-08-11 01:36:34 -07:00
karamvir 9ef1e3cd9b cleanup build config 2023-08-11 01:28:54 -07:00
karamvir 1459b05189 init cleanup build config 2023-08-11 01:21:15 -07:00
karamvir 2c992a0d23 Merge branch 'next' of https://github.com/mbecker20/monitor into next 2023-08-11 01:11:25 -07:00
karamvir f6a712c17b generic resource selector, what a revelation 2023-08-11 01:11:23 -07:00
mbecker20 97c03d97ad implement get builder avaialabel accounts 2023-08-11 03:54:35 -04:00
mbecker20 b80589ea63 get available accounts 2023-08-11 03:49:35 -04:00
mbecker20 4fd3e606fd LaunchServer 2023-08-11 03:17:58 -04:00
karamvir d1ae925454 give action buttons 150px 2023-08-10 23:36:01 -07:00
karamvir 3e260e4464 delete server 2023-08-10 23:35:21 -07:00
karamvir b7d841be14 decent build config 2023-08-10 23:31:27 -07:00
karamvir 854ce07e8f add username to toast 2023-08-10 23:10:59 -07:00
mbecker20 5e572ce5ef clean up ws correctly 2023-08-11 02:09:47 -04:00
karamvir bec8b3ce0f cleanup for build 2023-08-10 22:46:00 -07:00
karamvir df302015a3 migrate deployment configs 2023-08-10 22:17:28 -07:00
karamvir fd9c7848c2 fix defaults on variant configs 2023-08-10 21:23:49 -07:00
karamvir 3c6a2e2546 config.... again? 2023-08-10 21:13:55 -07:00
karamvir af7229acb0 updates 2023-08-10 20:30:54 -07:00
karamvir e1fbbe7c4e updatse 2023-08-10 18:14:41 -07:00
karamvir cdc7827b7e config..... again? 2023-08-10 16:43:39 -07:00
mbecker20 f24005e02e generic list item 2023-08-10 02:27:36 -04:00
mbecker20 0ff9a7e50d load migrator config 2023-08-10 01:46:07 -04:00
mbecker20 3ec810ed82 start migrator 2023-08-10 01:37:14 -04:00
karamvir 93fc8f7452 Merge branch 'next' of https://github.com/mbecker20/monitor into next 2023-08-09 21:36:42 -07:00
karamvir 172b3daeab init some manual configs 2023-08-09 21:36:39 -07:00
karamvir 1b3e3b19cf rm unnecessary console log 2023-08-09 17:09:54 -07:00
mbecker20 29b31ffa1e create / delete docker network on server api 2023-08-09 01:48:29 -04:00
karamvir f1aca3df4d add icons to create resource dropdown 2023-08-08 03:01:29 -07:00
karamvir 180ac60d21 add keydown listner to omnibar 2023-08-08 02:56:15 -07:00
karamvir b22621e3c4 cleanup 2023-08-08 02:39:53 -07:00
karamvir db1d61f1e3 Merge branch 'next' of https://github.com/mbecker20/monitor into next 2023-08-08 02:33:05 -07:00
karamvir 8e0c5b3792 update serach button 2023-08-08 02:32:58 -07:00
karamvir 1b30a8edd4 add theme toggle to header 2023-08-08 02:32:41 -07:00
mbecker20 fe1376a70c SetLastSeenUpdate 2023-08-08 03:52:50 -04:00
karamvir 2dbce8f695 update login page 2023-08-07 00:10:14 -07:00
karamvir b1700f3d14 update login flow 2023-08-07 00:10:02 -07:00
karamvir 63e3e0b9d3 rm old useuser hooks 2023-08-07 00:09:54 -07:00
karamvir cdd55ee61d disble builder config for the moment 2023-08-07 00:08:06 -07:00
karamvir c72050d329 add new builder selection config 2023-08-06 22:23:12 -07:00
mbecker20 9a89b82f83 builder tyeps 2023-08-07 01:10:29 -04:00
mbecker20 37becd9327 make server a builder type 2023-08-07 01:06:20 -04:00
karamvir d5f2ae7871 cleanup 2023-08-06 21:22:30 -07:00
karamvir 08b74b5304 fix security group ids override 2023-08-06 21:21:28 -07:00
karamvir 6183dbf653 Merge branch 'next' of https://github.com/mbecker20/monitor into next 2023-08-06 21:19:46 -07:00
karamvir 939f3db719 always pass type for builder config 2023-08-06 21:19:44 -07:00
karamvir d3e2ee2974 ensure confirm update closes on click 2023-08-06 21:19:27 -07:00
mbecker20 0b6d955672 client 2023-08-06 23:17:15 -04:00
mbecker20 6884453b0f GetAvailableAccounts / GetAvailableNetworks 2023-08-06 23:13:00 -04:00
mbecker20 0d37600cda send UpdateListItem over ws 2023-08-06 22:57:05 -04:00
mbecker20 c32211aa7a Merge branch 'feat/Resource' into next 2023-08-06 21:40:42 -04:00
mbecker20 e0776952ee use generic Resource struct 2023-08-06 21:40:29 -04:00
karamvir d92e4a014a improve new resource dialog 2023-08-06 15:10:34 -07:00
karamvir 48fc51a89a add label to builder type selector 2023-08-06 14:47:37 -07:00
karamvir 0af29e146d fix styles 2023-08-06 14:46:03 -07:00
karamvir 4467c64edd builder config is mostly go 2023-08-06 14:44:18 -07:00
karamvir 1314d7744f init builder config 2023-08-06 14:29:26 -07:00
karamvir 9a984e7e41 fix builder configs 2023-08-06 13:52:56 -07:00
karamvir 89e4010566 builder config 2023-08-06 13:44:03 -07:00
karamvir 1ecfc56f19 init builder config 2023-08-06 13:32:38 -07:00
karamvir 579c6eaf77 add volumes config 2023-08-06 13:32:28 -07:00
karamvir 4cecfd1611 improve button text for clarity 2023-08-06 11:24:05 -07:00
karamvir 5a9899c63d add ports config override 2023-08-06 11:23:00 -07:00
karamvir a1d3c46127 improve state mapping for deployment status icon 2023-08-06 11:19:09 -07:00
karamvir 902f3f7d00 hide logs when deployment not deployed 2023-08-06 10:56:10 -07:00
karamvir 8ef32c50c2 cleanup for build 2023-08-06 10:49:31 -07:00
karamvir e0d0512777 add image config, confirm update, etc 2023-08-06 10:48:52 -07:00
karamvir 9c73ffd7da fix dom nesting err 2023-08-06 10:48:39 -07:00
karamvir 0e2ca7c0d9 cleanup, add keyed fragment 2023-08-06 10:48:29 -07:00
karamvir 2d8f5ef337 add confirm update dialog 2023-08-06 10:48:09 -07:00
karamvir a02e9b8318 deployment image config override component 2023-08-06 01:37:26 -07:00
karamvir 4f844f673f init alerter config 2023-08-06 01:20:07 -07:00
karamvir 1a068ed82b add image selector stuff 2023-08-06 01:20:02 -07:00
karamvir b8df4caf75 fix resource updates 2023-08-06 01:19:32 -07:00
karamvir 11da11c326 fix deployment action button show states 2023-08-05 23:22:56 -07:00
karamvir 3e41a5568f fix omnibar types 2023-08-05 23:14:39 -07:00
karamvir 3f73ee6cff cleanup 2023-08-05 23:14:15 -07:00
karamvir 866137e128 Merge branch 'next' of https://github.com/mbecker20/monitor into next 2023-08-05 23:13:35 -07:00
karamvir 66b0ac7d51 add build args and extra args 2023-08-05 23:13:34 -07:00
mbecker20 7ac7edb437 to monitor name create 2023-08-06 01:54:52 -04:00
mbecker20 82ed74429c fix delete resource also remove from user recently viewed 2023-08-06 01:49:12 -04:00
karamvir 417dc7dac1 Merge branch 'next' of https://github.com/mbecker20/monitor into next 2023-08-05 22:45:19 -07:00
karamvir 999ce044cb add ui for extra args override 2023-08-05 22:45:17 -07:00
mbecker20 8759508c86 update resource flatten set 2023-08-06 01:25:45 -04:00
karamvir 56a40edc66 add alerter and repo cards to recently viewed 2023-08-05 22:17:06 -07:00
karamvir 5021c77e53 ensure all resource cards are equal height 2023-08-05 22:16:34 -07:00
karamvir 3fbe859c28 fix types for resources 2023-08-05 22:14:41 -07:00
karamvir 560e94a232 update builder card 2023-08-05 22:14:29 -07:00
karamvir d982ccd4d1 update alerter card 2023-08-05 22:14:21 -07:00
karamvir 45b38c23a5 add resource updates to build page 2023-08-05 22:06:40 -07:00
karamvir 442180014d fix missing fields in delpoyment card 2023-08-05 22:04:37 -07:00
karamvir 867a968b5b add proper server region to card 2023-08-05 22:00:51 -07:00
karamvir 334529ab67 improve build config 2023-08-05 21:58:24 -07:00
mbecker20 c66fc2d6de add fields to list resources 2023-08-04 20:43:57 -04:00
mbecker20 5eea95d118 update description api 2023-08-04 04:24:31 -04:00
karamvir 804a215190 server config 2023-08-04 00:29:22 -07:00
karamvir da6dfc9bcc refactor new config component, apply to server 2023-08-04 00:20:11 -07:00
karamvir 0d4ec308d6 flex responsive for last 3 dashboard resource cards 2023-08-04 00:05:43 -07:00
karamvir 24437e7b10 new config who dis 2023-08-04 00:00:15 -07:00
karamvir 1abaff6625 cleanup for build 2023-08-03 21:57:21 -07:00
karamvir 0c1692866c add operator username to update card 2023-08-03 21:53:25 -07:00
karamvir d28e9bb51c init new config layout 2023-08-03 21:51:40 -07:00
karamvir 760c5d521b refactor config 2023-08-03 21:48:37 -07:00
karamvir 6ce14ffc80 place servers first on dashboard 2023-08-03 17:22:51 -07:00
karamvir cc54725011 add new repo, complete resource adding options 2023-08-03 17:04:54 -07:00
karamvir c1a6f2b957 fix alerter and repo routing, alerter card link 2023-08-03 17:01:17 -07:00
karamvir 5d5578f89f add all resources to omnibar 2023-08-03 16:56:32 -07:00
karamvir e7bb58397e cleanup for build 2023-08-03 16:19:02 -07:00
karamvir 04690f1949 add clickable escape context to confirm button 2023-08-03 16:18:28 -07:00
karamvir 4df449c724 add confirm button, update actions 2023-08-03 16:10:27 -07:00
karamvir 315be1b61d update config pages 2023-08-03 15:58:42 -07:00
karamvir 4c30fb09ab fix new resource buttons 2023-08-03 15:26:00 -07:00
karamvir 2a24d1d9b7 only display update operation 2023-08-03 15:18:19 -07:00
karamvir fe771928ee cleanup message registrars 2023-08-03 15:16:04 -07:00
karamvir 768baccea7 refactor create resource button 2023-08-03 15:04:21 -07:00
karamvir c5a6f06c35 cleanup for build 2023-08-03 14:57:32 -07:00
karamvir e57a90ca01 improve dashboard, overview cards etc 2023-08-03 14:56:11 -07:00
karamvir 9d95750092 improve layout standardisation, dashboard 2023-08-03 10:50:52 -07:00
karamvir 3c5a218152 refactor add to recently viewed to own hook 2023-08-03 09:20:59 -07:00
karamvir cf6148eca5 upgrade to new resource component 2023-08-03 00:25:03 -07:00
karamvir df1945fb38 cleanup files and imports 2023-08-03 00:10:51 -07:00
karamvir ed93efd1bd add script to regen client 2023-08-02 23:55:44 -07:00
karamvir 2d48073262 init alerters 2023-08-02 23:52:25 -07:00
karamvir 8bba27361f fix responsive 2023-08-02 23:41:31 -07:00
karamvir de54794506 make server card info text sm 2023-08-02 23:38:29 -07:00
karamvir 0aee4d8466 refactor updates to use new apis 2023-08-02 23:35:42 -07:00
karamvir 1d8e0c7b1d add update username 2023-08-02 23:32:13 -07:00
karamvir 6fbec9fbd7 add event listeners in a useeffect 2023-08-02 23:28:04 -07:00
mbecker20 6d20457f0e GetUpdate 2023-08-03 02:09:34 -04:00
karamvir 73dc18fb78 fix recents hooks 2023-08-02 22:37:34 -07:00
mbecker20 440284663a fix update list nonsense 2023-08-03 01:16:46 -04:00
mbecker20 796793eefd get username and list updates list item 2023-08-03 01:13:59 -04:00
karamvir 260fd572bf improve recents, builder card 2023-08-02 22:09:24 -07:00
mbecker20 d6c03a51b1 add recently viewed max count 2023-08-03 00:54:21 -04:00
mbecker20 fe89c5835c push recently viewed 2023-08-03 00:48:54 -04:00
karamvir ddcc35ec58 add resource updates to builder 2023-08-02 21:34:47 -07:00
karamvir 0f39497bee add res target type to resource udpates 2023-08-02 21:34:40 -07:00
karamvir 58f1346124 add new builder, builder page, etc 2023-08-02 21:31:38 -07:00
karamvir 997366655c add recently viewed 2023-08-02 21:05:47 -07:00
karamvir de057fd08f update server card 2023-08-02 21:05:35 -07:00
karamvir d15607048e reduce gap 2023-08-02 20:40:07 -07:00
karamvir 5460d19f80 hide tags 2023-08-02 20:39:59 -07:00
karamvir ed4ae5efb8 hide tags 2023-08-02 20:30:15 -07:00
karamvir 530da2589d add 1 to month ffs 2023-08-02 20:29:00 -07:00
karamvir 05b2a16746 copy name when click it 2023-08-02 20:28:49 -07:00
mbecker20 35cbad2177 rename post_image to process_args 2023-08-02 17:05:16 +00:00
karamvir f13ac340b1 cleanup files 2023-08-02 09:59:12 -07:00
karamvir 14dc5e40fe init refactor 2023-08-01 21:14:39 -07:00
karamvir 4820313158 fix tabs value for logs 2023-08-01 11:35:42 -07:00
karamvir 9d573932f5 update resource cards, deployment logs 2023-08-01 10:42:44 -07:00
karamvir ab88fbc1bd init confirmation dialog 2023-08-01 08:43:34 -07:00
karamvir 1a806c209b cleanup for build 2023-07-31 21:59:55 -07:00
karamvir f15540e860 add basic socket toast and invalidate 2023-07-31 21:50:04 -07:00
mbecker20 d1be56923f testss 2023-08-01 00:20:03 -04:00
karamvir 493044f4e4 deployments chart uses summary 2023-07-31 21:02:20 -07:00
mbecker20 d15ca72e07 update should sort by start_ts 2023-07-31 23:53:55 -04:00
karamvir 9a16634c2e add max height to dropdown 2023-07-31 20:50:13 -07:00
karamvir 997940b4ab add omnibar etc 2023-07-31 20:44:00 -07:00
karamvir fee4585ca4 cleanup for build 2023-07-31 19:40:26 -07:00
karamvir 94c1df79ef improve depl config 2023-07-31 19:37:50 -07:00
karamvir b4e6626feb init server stats page 2023-07-31 12:29:55 -07:00
mbecker20 b8ad77085c add the configs 2023-07-30 15:51:59 -04:00
mbecker20 750f1fc379 collection name Tag 2023-07-30 14:04:32 -04:00
mbecker20 8b93b5d273 rename system stats collection 2023-07-30 14:02:01 -04:00
mbecker20 2ffbb9d9fa work on monitoring 2023-07-30 13:52:31 -04:00
mbecker20 97180c2f04 server stats history api 2023-07-30 01:08:34 -04:00
mbecker20 a9b9ed2d99 resource to list item 2023-07-29 22:17:13 -04:00
mbecker20 097f6c3b64 new search method 2023-07-29 14:50:35 -04:00
mbecker20 a279982187 implement list resources with ListItem on Resource trait 2023-07-29 14:35:36 -04:00
mbecker20 26c692978a paginated list updates 2023-07-29 04:08:36 -04:00
mbecker20 482f8bb862 build monthly stats and build versions 2023-07-28 01:54:29 -04:00
kv 3ac7cc1a59 cleanup for build 2023-07-27 14:02:59 -07:00
kv 7c5aff44a9 resource update cards now clickable to reveal details 2023-07-27 14:02:32 -07:00
kv a55d4e3c6f fix deployment update cards 2023-07-27 13:55:48 -07:00
kv 485b337c72 fix update sheet trigger, scrolling 2023-07-27 13:55:43 -07:00
kv 02f16168d3 cleanup for build 2023-07-27 13:42:32 -07:00
kv bd42af9c3e update deployment page, more to come 2023-07-27 13:41:44 -07:00
karamvir ce5a5a6e50 Merge branch 'next' of https://github.com/mbecker20/monitor into next 2023-07-27 12:55:40 -07:00
karamvir bf893ca8b4 first draft of updates and config pages 2023-07-27 12:55:38 -07:00
mbecker20 20a450d1d4 alerter api ts. fmt 2023-07-27 03:03:03 -04:00
mbecker20 70d11c3f5d replace those helpers with Resource trait 2023-07-27 03:00:36 -04:00
mbecker20 dc7690f4cf Config 2023-07-26 03:36:27 -04:00
karamvir 603260df5d Merge branch 'next' of https://github.com/mbecker20/monitor into next 2023-07-25 22:29:05 -07:00
karamvir 51bdc6b221 cleanup unnecessary type cast 2023-07-25 22:29:04 -07:00
mbecker20 4f6a9545e9 builder and repo summary 2023-07-26 00:59:20 -04:00
mbecker20 14edb4f913 finalize create build update before add 2023-07-25 21:06:11 -04:00
mbecker20 ffe0459994 remove solid snippets 2023-07-25 19:56:19 -04:00
karamvir 5138ce2040 cleanup 2023-07-25 16:45:34 -07:00
karamvir db85de0722 update cards, fix responsive layouts 2023-07-25 16:44:43 -07:00
karamvir 082a76bfb7 improve updates 2023-07-25 16:06:37 -07:00
karamvir 9a3b160e62 improve cards, add tags and accordion 2023-07-25 14:27:48 -07:00
karamvir c8b312bcb1 update cards etc 2023-07-25 13:23:55 -07:00
karamvir 9cc3fa0897 improve updates 2023-07-25 12:24:36 -07:00
karamvir 49063cac26 cleanup 2023-07-25 11:58:18 -07:00
karamvir 59a06c84a1 consolidate page layouts, cleanup 2023-07-25 11:56:57 -07:00
karamvir 6f5a7b97b5 update use read to now take config as well 2023-07-25 10:23:58 -07:00
karamvir 0db97fd5d5 refactor useRead, improve dx alot 2023-07-25 02:39:15 -07:00
karamvir b31f74f0c5 cleanup for build 2023-07-25 01:27:43 -07:00
karamvir ffb3957d4f playing around with new resource page, etc 2023-07-25 01:20:28 -07:00
karamvir 3b46e9a6bb Merge branch 'next' of https://github.com/mbecker20/monitor into next 2023-07-25 00:42:38 -07:00
karamvir b67cb3bd9e fix dockerfile 2023-07-25 00:42:36 -07:00
mbecker20 91a6485c20 add other status cases for summaries 2023-07-25 02:53:34 -04:00
mbecker20 da24634774 implement the summaries 2023-07-25 02:51:46 -04:00
karamvir 88198f7696 add summary stuff, cleanup vite build errors 2023-07-24 23:41:34 -07:00
mbecker20 2bdc7cd39a list updates for admin 2023-07-25 02:33:48 -04:00
karamvir ec4fcbc553 add summaries 2023-07-24 23:20:14 -07:00
mbecker20 30820a8d81 add summary response types 2023-07-24 23:10:29 -04:00
mbecker20 1c439a0392 add summary and update api 2023-07-24 22:31:38 -04:00
mbecker20 d6fe3461f7 get resource summaries 2023-07-24 22:28:47 -04:00
mbecker20 18a211592d fix default url 2023-07-24 21:39:11 -04:00
karamvir 8396c04b4a ooooo thats a sexy dashboard 2023-07-24 16:51:20 -07:00
karamvir 872254e865 cleanup header layout 2023-07-24 15:43:45 -07:00
karamvir 2a8fb84dc3 cleanup 2023-07-24 13:56:58 -07:00
karamvir 008dab08f8 normalise resources, better card hoverability 2023-07-24 13:55:07 -07:00
karamvir 781a3958d8 add template for deployment info 2023-07-24 11:37:19 -07:00
karamvir ec344cafb5 improve styles, actions 2023-07-24 10:30:50 -07:00
karamvir ec20b288be improve execute hooks, cleanup a bit etc 2023-07-24 09:24:02 -07:00
karamvir 9206e00a99 refactor component layout 2023-07-24 09:07:32 -07:00
karamvir 438a172e77 improve hoverable prop behavior, add link to /builds on dashboard 2023-07-24 01:24:50 -07:00
karamvir 8aaa559fbb slightly improve login / logout 2023-07-24 01:18:35 -07:00
karamvir 79b3d30c1e fixes 2023-07-24 01:09:49 -07:00
karamvir 3c5293b60b add actions, refactor deployments 2023-07-24 00:59:17 -07:00
karamvir d16da528af fixes 2023-07-24 00:34:00 -07:00
karamvir 6407a3a06d add builds page, build page, etc 2023-07-24 00:21:20 -07:00
karamvir 145804c05d add deployments back to header, fix pie variants 2023-07-23 23:53:54 -07:00
karamvir 7b5da511fe ok better dashboard 2023-07-23 23:49:19 -07:00
karamvir cc65d5ac23 add servers list page, upgrade server card with stats 2023-07-23 23:38:29 -07:00
karamvir 6c41362bfa add single deployment page etc 2023-07-23 23:31:19 -07:00
karamvir b57688033e add some basic dashboard components, add server page 2023-07-23 16:08:02 -07:00
mbecker20 9c120118e9 fix types imports 2023-07-22 12:30:52 -04:00
mbecker20 70ce321c75 remove server to_notify 2023-07-22 11:42:46 -04:00
mbecker20 ed3df2beba fix 2 responses 2023-07-22 11:25:38 -04:00
mbecker20 613d445c99 vite config resolve monitor client 2023-07-22 02:53:21 -04:00
mbecker20 5cc3885e32 fix the ts client 2023-07-22 02:25:02 -04:00
mbecker20 7e66eca6ae Merge branch 'next-fe' into next 2023-07-21 23:16:57 -04:00
Karamvir eef1c3f41d init frontend 2023-07-20 14:36:01 -07:00
Karamvir 09defb60a5 update client 2023-07-20 14:35:51 -07:00
mbecker20 4fd931c508 add cors layer 2023-07-20 21:02:14 +00:00
mbecker20 9b656a13e6 add container log search via | grep 2023-07-18 18:41:53 +00:00
mbecker20 e95fe8f410 fix doc indexes 2023-07-17 06:14:16 +00:00
mbecker20 91628c61ee update tests 2023-07-17 05:18:51 +00:00
mbecker20 0747bc9bc1 env override config port 2023-07-17 04:40:57 +00:00
mbecker20 2df881d43f include commit msg in commit hash log 2023-07-16 22:51:23 -04:00
mbecker20 cd10eaf9db smth 2023-07-16 22:39:55 -04:00
mbecker20 e0f69a6420 work on monitoring 2023-07-16 22:24:44 -04:00
mbecker20 e8828ed74b update slack version 2023-07-16 12:21:03 -04:00
mbecker20 ce29e0685c move helpers around 2023-07-16 15:38:01 +00:00
mbecker20 6c7dda2b67 alert enum and send alert logic 2023-07-16 05:51:45 +00:00
mbecker20 7694e3f565 update ts lib 2023-07-15 04:21:10 -04:00
mbecker20 b8c9731081 work on ts client 2023-07-15 04:14:46 -04:00
mbecker20 14ec8b2bcb Merge branch 'temp' into next 2023-07-15 03:54:58 -04:00
mbecker20 e9d7543c43 tag crud 2023-07-15 03:54:49 -04:00
mbecker20 311e090826 update update after build clone 2023-07-14 06:37:18 +00:00
mbecker20 1c1172e0e7 fix core dockerfile 2023-07-14 06:24:22 +00:00
mbecker20 2a1b719f67 move core, periphery, tests under /bin 2023-07-14 06:06:16 +00:00
mbecker20 9b9cf8ad9f add commit hash to clone log 2023-07-14 04:32:38 +00:00
mbecker20 946f427c4b standard logger 2023-07-13 23:42:28 -04:00
beckerinj 100f34a32b pretty debug print error 2023-07-13 17:12:24 -04:00
beckerinj 7a9b506958 update mungos version, remove created_at (its in _id) 2023-07-13 16:34:03 -04:00
mbecker20 4cd074ee2a implement cancel build 2023-07-13 08:24:47 +00:00
mbecker20 e2a76274ef update partial derive version 2023-07-12 08:24:00 +00:00
beckerinj aa197bd89e cleanup 2023-07-11 14:55:19 -04:00
beckerinj fde1165408 update startup log 2023-07-11 14:54:51 -04:00
beckerinj 731b91e0a9 startup log after logger init 2023-07-11 14:46:22 -04:00
mbecker20 60205ece9d use partial derive to impl Froms 2023-07-11 03:12:52 -04:00
mbecker20 6b8fc5d624 alerter api 2023-07-11 03:03:19 -04:00
mbecker20 54df0af48e implement some alerter crud 2023-07-10 05:10:13 +00:00
mbecker20 f1101cae5a update mungos & fmt 2023-07-09 18:26:03 +00:00
mbecker20 f7a1edb7e5 update mungos to 0.4.10 2023-07-09 18:11:19 +00:00
mbecker20 4e7311bdfe define more api for alerter / tag 2023-07-09 06:03:21 +00:00
mbecker20 818210805f create alerter resource 2023-07-09 05:46:20 +00:00
mbecker20 0e1026a100 more dynamic mongo info loading from config 2023-07-08 05:54:12 +00:00
mbecker20 553a2e3dad create the example configs 2023-07-08 03:17:50 +00:00
mbecker20 c12eb40459 add api to search resources by tag 2023-07-07 06:55:47 +00:00
mbecker20 9b68283eb3 improve typeshare types 2023-07-06 20:54:27 +00:00
mbecker20 e9ee467940 derive EnumVariant enum 2023-07-06 20:30:27 +00:00
mbecker20 91f1de5d95 change tags api, add tags requests, get list items 2023-07-06 06:06:14 +00:00
mbecker20 6ce6b55b68 get server / deployment status from cache 2023-07-05 23:48:07 +00:00
mbecker20 d0b5e3e241 split api into read, write, execute 2023-07-04 05:34:13 +00:00
mbecker20 f16176f298 get build action states 2023-07-04 03:56:48 +00:00
mbecker20 2dc4d41524 move github listener to potentially add more listeners 2023-07-04 03:44:45 +00:00
mbecker20 2bf2901dcd move clients 2023-07-04 03:20:11 +00:00
mbecker20 99c2d6195d crud for builder 2023-07-04 00:02:27 +00:00
mbecker20 c5b1079be9 repo api 2023-07-03 22:12:54 +00:00
mbecker20 c25e05fde7 work on repo api 2023-07-03 20:09:44 +00:00
mbecker20 c6290cb7f6 start repo crud / actions 2023-07-03 07:05:01 +00:00
mbecker20 b08d5090a2 github build listener 2023-07-03 06:48:58 +00:00
mbecker20 3da824b4c3 finish permissions routes 2023-07-03 06:27:44 +00:00
mbecker20 9a1619c554 test periphery api 2023-07-03 06:09:30 +00:00
mbecker20 312f7a9003 work on permissions api 2023-07-03 01:11:36 -04:00
mbecker20 a197948837 change bin name for monitor core 2023-07-02 07:58:54 +00:00
mbecker20 765d510127 some more core routes 2023-07-02 07:49:13 +00:00
mbecker20 b5179e443b setup some more deployment reqs 2023-06-30 05:41:32 +00:00
mbecker20 fe6c371a9f fmt. copy deployment / build 2023-06-30 05:29:15 +00:00
mbecker20 d66c5ed618 ts client 2023-06-30 04:52:08 +00:00
mbecker20 70ba120cfb ts client 2023-06-29 07:40:35 +00:00
mbecker20 33f1d85194 work on typescript client 2023-06-29 06:55:32 +00:00
mbecker20 e3f1b449e2 add the deployment actions 2023-06-28 12:16:25 -04:00
beckerinj 7e580efc77 add temp monitoring stuff and start of builder crud 2023-06-25 02:38:16 -04:00
mbecker20 b33501cce6 implement basic deployment api 2023-06-24 07:21:15 +00:00
mbecker20 402259ef11 implement build request 2023-06-24 00:42:14 +00:00
mbecker20 2d4c682fac work on Aws builds / RunBuild 2023-06-23 08:07:35 +00:00
mbecker20 2affc5f555 work on the state change monitoring 2023-06-22 07:57:25 +00:00
mbecker20 9ce1dded38 crud for deployment and build 2023-06-22 06:39:57 +00:00
mbecker20 383b0d125c implement some deployment crud 2023-06-20 08:02:48 +00:00
mbecker20 8023710702 make deployment request resolver file 2023-06-20 07:23:20 +00:00
mbecker20 82c0cbc8bd refactor api router lcoation 2023-06-20 07:20:44 +00:00
mbecker20 893a7f22a4 refactor api router out of main 2023-06-20 07:15:53 +00:00
mbecker20 b903e511b5 finish server api 2023-06-20 07:13:14 +00:00
mbecker20 86379d1c79 rename server 2023-06-19 08:03:58 +00:00
mbecker20 6320d6fbeb implement the ws 2023-06-19 07:34:36 +00:00
mbecker20 636023167d start implementing core server api 2023-06-18 21:12:26 +00:00
mbecker20 8a86825357 fix useless conversion 2023-06-18 17:55:58 +00:00
mbecker20 f5d68b4d78 add api secret create / delete methods 2023-06-18 17:55:37 +00:00
mbecker20 7295e656eb fix dockerfile 2023-06-18 06:18:52 +00:00
mbecker20 5e51050fa3 initialize monitor client 2023-06-18 06:15:31 +00:00
mbecker20 c510a64207 add dockerfile 2023-06-18 05:54:21 +00:00
mbecker20 7269050cf4 auth should work 2023-06-18 05:49:32 +00:00
mbecker20 5730e5d2ae implement db and some auth functions 2023-06-18 05:07:05 +00:00
mbecker20 76ddbe1869 start working on core 2023-06-16 06:20:26 +00:00
mbecker20 b5ef174312 finish basic periphery resolvers 2023-06-15 08:02:51 +00:00
mbecker20 31007f3d78 template the entities 2023-06-11 17:51:46 +00:00
mbecker20 c5a66709ad partial derive working 2023-06-11 17:49:14 +00:00
mbecker20 aa4815b01d restructure and add more requests 2023-06-11 05:48:46 +00:00
mbecker20 7d6b975592 implement resolver api 2023-06-10 22:34:42 +00:00
mbecker20 3a57712dd2 add periphery client to core deps 2023-06-10 08:42:25 +00:00
mbecker20 62eb35340e move periphery api requests to seperate crate 2023-06-10 08:41:34 +00:00
mbecker20 e9880d00ab resolve request 2023-06-10 08:15:07 +00:00
mbecker20 73c1792fea implement the periphery stats api 2023-06-10 07:14:08 +00:00
mbecker20 d36f399d08 rename core AppState to State 2023-06-09 15:50:37 +00:00
mbecker20 c8a24dbcbc work to make backend Req -> Res typesafe using Resolve trait 2023-06-09 15:50:13 +00:00
mbecker20 fecc5134ad resolver trait 2023-06-09 09:01:55 +00:00
mbecker20 8ad84a8cec rework the stats routes 2023-06-09 08:31:46 +00:00
mbecker20 51ebee2910 add types for system stats 2023-06-08 16:17:48 +00:00
mbecker20 20d496e617 implement the periphery request guard 2023-06-08 06:38:36 +00:00
mbecker20 44a16dd214 init monitor next (v5) 2023-06-07 07:30:50 +00:00
mbecker20 4695b79b73 delete everything for next rewrite 2023-06-07 04:59:00 +00:00
mbecker20 9c0be07ae1 refactor caching to use custom Cache struct 2023-05-28 08:31:18 +00:00
mbecker20 ab945aadde fix set termination timeout 0 2023-05-25 20:18:39 +00:00
mbecker20 c1c461c273 add command crud and run api 2023-05-24 07:45:52 +00:00
mbecker20 336742ee69 update author and clap args 2023-05-24 05:28:46 +00:00
beckerinj 405dacce1c sanitize container logs for any script tags 2023-05-13 02:23:05 -04:00
beckerinj 9acd45aa93 fix log whitespace non preservation issue 2023-05-13 02:14:14 -04:00
beckerinj c889c2cc03 clean up log component imports 2023-05-13 01:49:06 -04:00
mbecker20 7ac91ef416 view images on server 2023-05-12 07:22:56 +00:00
mbecker20 8e28669aa1 potentially fix deployment update getting crossed with another deployment 2023-05-09 21:17:10 +00:00
mbecker20 6cdb91f8b8 more readable container state in header 2023-05-04 01:12:55 +00:00
mbecker20 e892474713 modify create deployment initializer 2023-05-03 21:03:57 +00:00
mbecker20 abdae98816 core handle term signal 2023-05-03 20:02:37 +00:00
mbecker20 ab4fe49f33 deployment / build config reset 2023-05-03 19:31:59 +00:00
mbecker20 1ace35103b fix ansi-to-html install 2023-05-03 07:21:38 +00:00
beckerinj dbee729eee show ansi colors in the logs correctly 2023-05-03 03:13:42 -04:00
mbecker20 792576ce59 add auto redeploy user 2023-05-02 17:21:25 +00:00
mbecker20 a07624e9b9 0.3.4 fix docker stop --signal on older docker versions 2023-05-01 21:03:25 +00:00
mbecker20 bb8054af8a log version first 2023-05-01 08:43:00 +00:00
mbecker20 7738f3e066 core logs version on startup 2023-05-01 08:34:20 +00:00
mbecker20 5dee16a100 0.3.3 add default term signal and timeout to deployment 2023-05-01 08:28:12 +00:00
mbecker20 35f3bcdf2f update core version 2023-05-01 03:05:51 +00:00
mbecker20 130ca8e1f1 bump versions to 0.3.2 2023-05-01 01:53:58 +00:00
mbecker20 ced4c21688 update monitor client to 0.3.1 2023-05-01 01:41:23 +00:00
mbecker20 6ec7078024 custom termination signals 2023-04-30 06:52:27 +00:00
mbecker20 b28d8f2506 update frontend types 2023-04-30 03:26:01 +00:00
mbecker20 c88a9291a0 support auto redeploy and custom stop signals 2023-04-30 00:10:59 +00:00
mbecker20 1e82d19306 build summary defaults to time view 2023-04-21 16:34:03 +00:00
mbecker20 dd87e50cb2 build stats summary 2023-04-21 08:52:17 +00:00
mbecker20 4c8f96a30f build stats card 2023-04-21 08:08:15 +00:00
mbecker20 c4f45e05f1 finish build stats api 2023-04-21 08:08:01 +00:00
mbecker20 6aa382c7c1 finish build stats api 2023-04-20 16:34:14 +00:00
mbecker20 ccb9f059e6 get build stats api 2023-04-20 07:34:49 +00:00
mbecker20 1cdcea0771 start on route to get daily build stats (time, count) 2023-04-19 07:02:21 +00:00
mbecker20 88dda0de80 update rename deployment to check whether deployment has repo attached, and if so, reclone it to account for name change. 2023-04-19 06:44:58 +00:00
mbecker20 30ed99e2b0 publish monitor client 0.3.1 with Readme 2023-04-18 07:56:30 +00:00
mbecker20 e5953b7541 monitor client readme 2023-04-18 07:55:05 +00:00
mbecker20 1f9d01c59f new home servers png 2023-04-18 06:31:23 +00:00
mbecker20 cc5210a3d8 fix server children add new button 2023-04-18 06:17:42 +00:00
mbecker20 26559e2d3b delete builds screenshots 2023-04-18 03:20:20 +00:00
mbecker20 7eeddb300f add link to screenshots docsite 2023-04-18 02:59:37 +00:00
mbecker20 1e01bae16b add screenshots to monitor readme 2023-04-18 02:47:46 +00:00
mbecker20 87c03924e5 remove second universal search 2023-04-18 02:46:46 +00:00
mbecker20 f0998b1d43 add universal search screenshot 2023-04-18 02:42:21 +00:00
mbecker20 1995a04244 add screenshots 2023-04-18 02:38:07 +00:00
mbecker20 420fe6bcd5 add build time to version selector 2023-04-17 08:26:34 +00:00
mbecker20 d4e26c0553 fix docker repo reference 2023-04-16 19:33:28 +00:00
mbecker20 5f5e7cb45e add note about oauth 2023-04-16 07:44:34 +00:00
beckerinj 8aa0304738 core setup doc 2023-04-16 03:32:06 -04:00
beckerinj 8ec98c33a4 first user is auto enabled and made admin 2023-04-16 03:23:30 -04:00
beckerinj 2667182ca3 update core example config 2023-04-16 02:49:00 -04:00
mbecker20 1cd0018b93 0.3.0 check whether pre_build / on_clone / on_pull are non empty before running 2023-04-14 22:58:10 +00:00
beckerinj 359789ee29 update aws sdk version 2023-04-14 12:52:52 -04:00
mbecker20 e79c860c0f make update hover 2023-04-14 15:06:05 +00:00
mbecker20 765f53f30e types doc 2023-04-14 06:14:33 +00:00
beckerinj 3c3c21d7f5 move header to top. redesign build 2023-04-14 01:57:10 -04:00
mbecker20 eb700cb500 improve search functionality 2023-04-14 03:53:21 +00:00
beckerinj b3b723a717 build show unknown if builds[id] cannot be found 2023-04-13 11:19:51 -04:00
beckerinj 555c230d2e update menu stays open through updates 2023-04-13 03:07:31 -04:00
beckerinj adf4b97aef lots of api docs 2023-04-13 02:23:40 -04:00
beckerinj 32c38d796b docs 2023-04-12 18:19:13 -04:00
beckerinj c8829e15ed get most of servers api docs 2023-04-10 17:58:52 -04:00
beckerinj 453df417d0 finish deployment api doc 2023-04-10 04:39:47 -04:00
mbecker20 02a7741a9c don't show group editing ui if user doesn't have permissions 2023-04-09 22:55:30 +00:00
mbecker20 96fc5b0ca8 group page / edit work with non admin users 2023-04-09 22:38:36 +00:00
mbecker20 b13e624a66 support manage user permissions on groups 2023-04-09 19:24:07 +00:00
beckerinj 6a8f66f272 work on deployment api docs 2023-04-09 02:15:08 -04:00
mbecker20 0c638a08fd fix problems with build config page breaking 2023-04-07 20:15:21 +00:00
mbecker20 b07f8af8e5 deployment extra args fix as well 2023-04-07 19:50:16 +00:00
mbecker20 3bbb2a985f extra args frontend needs to account for when they don't exist 2023-04-07 19:50:06 +00:00
beckerinj afdf71c545 work on api docs 2023-04-07 11:12:44 -04:00
beckerinj 8de8d2df9a work on API docs 2023-04-06 01:03:01 -04:00
mbecker20 1dffdbddc2 sort by ts increasing 2023-04-05 18:40:12 +00:00
mbecker20 11fff633b0 don't use $mod in stats query 2023-04-05 18:17:56 +00:00
mbecker20 61bc44d1f4 add hover class to home tree build 2023-04-04 21:18:13 +00:00
beckerinjandGitHub e8fabb8cfa Update index.mdx 2023-04-03 16:40:15 -04:00
mbecker20 7a50885847 exit group view with Escape in addition to ArrowLeft 2023-04-03 16:35:44 +00:00
beckerinj 6239da45f4 delete old docs and provide link to docsite 2023-04-03 11:28:50 -04:00
mbecker20 af597eb3c7 clean up builds 2023-04-03 05:55:37 +00:00
mbecker20 d66cda068c connect up delete group 2023-04-03 05:52:58 +00:00
beckerinj 91fcd07c1c make group behavior more sensible frontned 2023-04-03 01:50:45 -04:00
mbecker20 85aa470da1 publish docs 2023-04-03 02:48:00 +00:00
mbecker20 6f0d5f37a5 update home page description for sso 2023-04-02 22:30:37 +00:00
beckerinj 1b4d604404 deploymentBranch 2023-04-02 18:22:04 -04:00
beckerinj a7f6cbe0b9 small docsite fixes 2023-04-02 12:44:35 -04:00
beckerinj 9cf28bf123 improve docs 2023-04-02 04:15:06 -04:00
beckerinj c92e04294a monitor docs site working 2023-04-02 04:03:01 -04:00
beckerinj 36f059b455 docsite 2023-04-02 01:40:56 -04:00
mbecker20 4aac301852 0.2.14 only try to merge files, filter nested directories 2023-04-01 19:35:04 +00:00
mbecker20 b375708bbd 0.2.13 support config directories 2023-04-01 19:02:43 +00:00
mbecker20 10b6a9482b update aws sdk verison and implement merge_config_files 2023-04-01 07:06:17 +00:00
mbecker20 84d45c5df8 0.2.12 fix docker build command interp 2023-03-31 18:06:18 +00:00
mbecker20 c6559814b1 frontend for docker build extra args and use buildx 2023-03-31 17:31:39 +00:00
mbecker20 c8c080183f remove publish for cli 2023-03-31 17:04:15 +00:00
mbecker20 597b67f799 0.2.11 support buildx and arbitrary extra args 2023-03-31 17:03:38 +00:00
mbecker20 ec52d5f422 support docker buildx build and passing arbitrary extra args 2023-03-31 16:57:02 +00:00
mbecker20 34806304d6 add center menu title bottom border and adjust copy menu 2023-03-31 05:41:35 +00:00
beckerinj 87953d5495 menu padding 2rem 2023-03-31 01:27:17 -04:00
beckerinj b6c7c80c95 full width input for copy menu 2023-03-31 01:26:19 -04:00
beckerinj 77e568d5c3 small 2023-03-27 12:41:59 -04:00
mbecker20 699fc51cf7 link to build if click on image deployment header 2023-03-27 15:30:11 +00:00
mbecker20 21029c90b7 info page on stats page 2023-03-27 05:13:12 +00:00
mbecker20 6b0530eb7f brush up server stats page 2023-03-26 23:15:58 +00:00
beckerinj f7061c7225 toggle to show absolutes for mem and disk stat graphs 2023-03-26 18:47:21 -04:00
mbecker20 750f698369 updates page 2023-03-26 02:20:39 +00:00
mbecker20 ec5ef42298 add max height / scrolling to copy menu target selector 2023-03-24 00:45:47 +00:00
beckerinj 46820b0044 increase the tab title padding 2023-03-23 20:36:31 -04:00
beckerinj 425a6648f7 improve summary styling 2023-03-23 03:13:19 -04:00
mbecker20 349fc297ce 0.2.10 add renaming functionality 2023-03-22 20:33:26 +00:00
mbecker20 5ad87c03ed show none when none 2023-03-22 07:16:04 +00:00
mbecker20 d16006f28f improve design 2023-03-22 07:03:28 +00:00
beckerinj 7f0452a5f5 improve pie chart home page 2023-03-22 02:59:29 -04:00
mbecker20 c605b2f6fc implement pie chart summary 2023-03-22 06:41:57 +00:00
beckerinj 6c2d8a8494 unnecessary import 2023-03-21 23:10:01 -07:00
mbecker20 874691f729 add a pie chart component 2023-03-21 09:44:00 +00:00
beckerinj cdf702e17d orange 2023-03-21 00:52:25 -07:00
mbecker20 25fdb32627 rename deployments 2023-03-19 08:14:54 +00:00
mbecker20 e976ea0a3a improve the behavior 2023-03-17 20:55:37 +00:00
mbecker20 34e6b4fc69 rename server working 2023-03-17 20:40:19 +00:00
mbecker20 a2d77567b3 dont need to 'to_monitor_name' servers 2023-03-15 07:35:54 +00:00
mbecker20 ecb460f9b5 add rename deployment to monitor client 2023-03-14 20:15:27 +00:00
mbecker20 63444b089c rename deployment func 2023-03-12 23:36:20 +00:00
mbecker20 c787984b77 initialize mongo with builder 2023-03-12 22:03:31 +00:00
mbecker20 bf3d03e801 fix problem of repeated query for docker accounts, secrets, etc 2023-03-12 05:07:55 +00:00
mbecker20 bc2e69b975 use resource to load stuff 2023-03-12 03:45:49 +00:00
mbecker20 7b94fcf3da 0.2.9 finish implement secret helpers on frontend 2023-03-12 00:48:18 +00:00
mbecker20 9cf03b8b88 add route to get available secret keys 2023-03-12 00:16:03 +00:00
mbecker20 a288edcf61 0.2.8 implement secret interpolation on builds and deployments 2023-03-11 23:34:17 +00:00
mbecker20 89cc18ad37 update tokio version 2023-03-10 19:27:40 +00:00
mbecker20 ffa3b671e1 change default alerting thresholds 2023-03-09 07:08:38 +00:00
beckerinj f32eeb413b add label to home sort by 2023-03-08 16:10:23 -05:00
mbecker20 b5a5103cfc move core dockerfile 2023-03-08 18:26:42 +00:00
mbecker20 c5697e59f3 delete sample file 2023-03-08 18:24:15 +00:00
mbecker20 f030667ff4 update image in deployment header as well 2023-03-07 17:41:00 +00:00
mbecker20 e9fef5d97c change get_deployment_deployed_version to 'unknown' if not known 2023-03-07 17:39:59 +00:00
beckerinj f5818ac7ea actually return image 2023-03-07 12:37:45 -05:00
mbecker20 c85ab4110d show derived image is container.image is sha256: 2023-03-07 16:30:59 +00:00
mbecker20 9690ea35b8 make description text area larger 2023-03-07 08:44:31 +00:00
mbecker20 6300c8011b fix modify global user permissions operator - make operator the admin, instead of the target 2023-03-06 17:09:12 +00:00
mbecker20 97f582b381 customizable page title 2023-03-06 02:07:08 +00:00
mbecker20 5135a9c228 show server name under deployment on admin user manage page 2023-03-06 01:46:40 +00:00
mbecker20 b7d1212a82 make resources links in account page 2023-03-05 21:50:15 +00:00
mbecker20 7d9d0a9fc4 add view of resources you can access on account page 2023-03-05 21:42:11 +00:00
beckerinj ed9aef4321 add resources to account page 2023-03-05 16:33:40 -05:00
mbecker20 0aa638bdf4 only do daily update if servers not empty 2023-03-05 20:19:06 +00:00
mbecker20 0ec39d793d one page to view all permissions for user 2023-03-05 09:24:59 +00:00
mbecker20 5579ba869c v0.2.7 remove passkeys from periphery startup log 2023-03-03 17:27:42 +00:00
mbecker20 210940038c hide passkeys on periphery startup config log 2023-03-03 17:24:28 +00:00
mbecker20 98a1a60362 /home/ubuntu/example 2023-03-03 08:15:17 +00:00
mbecker20 86cf9116ba update builds and deployments docs with link to file paths doc 2023-03-03 08:09:41 +00:00
mbecker20 8b2defe0d9 add doc about file paths 2023-03-03 07:58:09 +00:00
mbecker20 50b14b3ce5 0.2.6 store ami name instead of ami_id (because the id has to change sometimes) 2023-03-03 07:11:55 +00:00
mbecker20 1bfb17cb5d handle setting default ami id correctly 2023-03-02 21:32:22 +00:00
mbecker20 b90acb66c7 0.2.5 stop leaking github token 2023-03-02 21:25:46 +00:00
mbecker20 7648b0dd10 don't let github access token leak when clone fails 2023-03-02 21:21:07 +00:00
mbecker20 2d69f1791a default builds to use aws config on create 2023-03-02 17:11:23 +00:00
mbecker20 5ba887095a allow select "none" for docker organization 2023-03-02 17:00:40 +00:00
mbecker20 19b7405562 show organization immediately if it exists on build 2023-03-01 23:20:54 +00:00
mbecker20 f5c5f734e1 clean deployment / build config before update 2023-03-01 21:18:40 +00:00
mbecker20 8d1639bcaf fix build permissions 2023-03-01 10:18:58 +00:00
mbecker20 e2446af00e remove print 2023-03-01 10:12:26 +00:00
mbecker20 1b39aaaa38 implement description 2023-03-01 09:46:50 +00:00
mbecker20 5a2a1a3d98 0.2.4: add description and update description 2023-03-01 08:13:07 +00:00
mbecker20 39eceb745b v0.2.2: configure docker organizations for builds 2023-03-01 07:18:49 +00:00
beckerinj 4c1ec5db33 edit permissions.md 2023-02-28 02:26:57 -05:00
beckerinj 8b68b9481e permissions.md 2023-02-28 02:21:46 -05:00
beckerinj 14843f83c6 add core setup link to table of contents 2023-02-28 01:56:05 -05:00
beckerinj e67d87e885 even 2023-02-28 01:53:54 -05:00
beckerinj 7d4d865d58 elaborate on networks 2023-02-28 01:53:04 -05:00
beckerinj 1e4aaff23c if to is 2023-02-28 01:37:43 -05:00
beckerinj df3f4a5f4a improve builds.md 2023-02-28 01:36:35 -05:00
beckerinj 1f8557300d fix type 2023-02-28 01:33:55 -05:00
beckerinj bf17d705f0 fix typo 2023-02-28 01:33:09 -05:00
beckerinj 0d24b792c6 container lifetime management 2023-02-28 01:30:43 -05:00
mbecker20 fb61e36417 remove download log button, its kind of unsafe if the log is long 2023-02-28 06:18:42 +00:00
beckerinj c39869d2f8 deployments.md 2023-02-28 01:18:11 -05:00
mbecker20 750e0274da #example 2023-02-28 05:54:43 +00:00
beckerinj a9d37ab667 add placeholders to show to to pass env 2023-02-28 00:52:09 -05:00
mbecker20 eacb549d5e update core config example with github_webhook_base_url 2023-02-28 05:08:05 +00:00
mbecker20 ce7cb8fe45 improve confirm menu with copy button 2023-02-28 04:58:39 +00:00
mbecker20 f9fe4e32b4 restyle builds and deployments 2023-02-28 04:24:15 +00:00
mbecker20 2c9fc2bad4 always show docker account 2023-02-28 03:57:35 +00:00
mbecker20 94949291c2 fix notifications, add dynamic listener url 2023-02-28 03:41:25 +00:00
beckerinj 2944ba6ef9 cli v0.2.3 2023-02-27 22:18:04 -05:00
beckerinj 997e68a31d dynamic github webhook base url 2023-02-27 22:17:37 -05:00
beckerinj bfb9d9e34d add periphery version in builder connected logs 2023-02-27 21:46:43 -05:00
mbecker20 3b9219b586 fix updates selector style 2023-02-27 05:55:33 +00:00
mbecker20 7bf2a88ab1 finish build args section 2023-02-27 05:53:56 +00:00
mbecker20 d21ed093dc fix build args gap 2023-02-27 05:52:13 +00:00
mbecker20 6e89671e91 switch cli build and build args build config 2023-02-27 05:47:10 +00:00
beckerinjandGitHub ee1128a666 Update builds.md 2023-02-27 00:45:16 -05:00
beckerinjandGitHub 63b5deecd7 Update servers.md 2023-02-27 00:44:01 -05:00
mbecker20 f4f97ce1a7 finish builds / servers 2023-02-27 05:42:22 +00:00
mbecker20 a666df099f use image on deployment container 2023-02-26 06:55:31 +00:00
mbecker20 21dd0ee072 cli should be 0.2.2 2023-02-26 06:48:38 +00:00
mbecker20 bd2a1d4236 v0.2.1 merge multiple config files 2023-02-26 06:25:26 +00:00
mbecker20 7acdbcfd8f improve updates selector - add class 2023-02-25 22:34:37 +00:00
mbecker20 58514c5c93 fix height of builder config when no builder type chosen 2023-02-25 22:07:05 +00:00
mbecker20 580e800923 fix clap args with - 2023-02-23 23:14:02 +00:00
mbecker20 29f6b19f33 cli 0.2.0. fix starting mongo when no existing container present 2023-02-23 22:46:17 +00:00
mbecker20 e090247723 fix error when user doesn't have access to build on deployment 2023-02-23 08:00:55 +00:00
mbecker20 1374c26cd8 0.2.0 cleanup 2023-02-23 07:28:11 +00:00
mbecker20 5467b40b2e fix to git clone <TOKEN> splice 2023-02-23 07:22:32 +00:00
mbecker20 165b9012da improve users responsiveness 2023-02-23 07:17:18 +00:00
mbecker20 22630f665e update the manage users page 2023-02-23 07:09:33 +00:00
mbecker20 3d867084ba log poll default to false 2023-02-23 06:44:55 +00:00
mbecker20 171dd2d9e0 remove menu animation, change builder type to selector 2023-02-23 06:38:36 +00:00
mbecker20 9709239f88 build version h2 2023-02-22 22:45:05 +00:00
mbecker20 60d457b285 improve deployment in tree and display deployed version in header 2023-02-22 22:27:54 +00:00
mbecker20 8b1d4793a7 0.1.17 support building with ec2 instances 2023-02-22 21:05:03 +00:00
mbecker20 f2166c8435 configure aws config on builds 2023-02-22 20:49:56 +00:00
mbecker20 07d723a748 more prog on frontend, some api etc 2023-02-22 06:39:32 +00:00
mbecker20 b36f485287 put server / aws build on build header 2023-02-21 23:05:49 +00:00
mbecker20 a121ae0828 begin frontend refactor for ephemeral build support 2023-02-21 18:11:43 +00:00
mbecker20 e2b5a02008 building works 2023-02-21 05:22:26 +00:00
mbecker20 575aa62625 update versions to 0.1.16 2023-02-21 04:32:41 +00:00
mbecker20 ac88a2c4ed testing and fixes for aws build 2023-02-21 04:27:30 +00:00
mbecker20 f1dcb71a8a poll periphery on build instance to ensure connectivity before moving on 2023-02-20 22:56:22 +00:00
mbecker20 30d04bc201 support building on epheral ec2 2023-02-20 09:41:15 +00:00
mbecker20 33a00bb1a2 poll when instance running 2023-02-20 04:55:44 +00:00
mbecker20 ccca44ea89 start working on build instance spawn on aws 2023-02-20 01:19:07 +00:00
mbecker20 ae5f36fe51 0.1.15 use passkey for addition core - periphery auth layer 2023-02-17 18:29:13 +00:00
beckerinj 69ce1e4f36 start adding passkey auth to core periphery communication 2023-02-17 12:53:09 -05:00
mbecker20 6e444b9032 temp remove deployment state polling 2023-02-14 18:33:32 +00:00
beckerinj 73eff72da4 work on docs 2023-02-13 11:16:27 -05:00
beckerinj 698e3c214b opinionated 2023-02-12 14:48:28 -05:00
beckerinj 9da77667dc add next page 2023-02-12 04:14:06 -05:00
beckerinj c30793fb8f to 2023-02-12 04:12:49 -05:00
beckerinj 84fdaab24d close intro better 2023-02-12 04:10:10 -05:00
beckerinj cbd67bb609 back to table 2023-02-12 04:05:35 -05:00
beckerinj 00f58e9008 architecture 2023-02-12 03:59:26 -05:00
beckerinj 7738fab351 intro 2023-02-12 03:57:55 -05:00
beckerinj 06e8f6589b links 2023-02-12 00:55:14 -05:00
beckerinj 57d9287724 start docs 2023-02-12 00:51:05 -05:00
mbecker20 2cc65595ee log only polls when container is running 2023-02-11 20:29:25 +00:00
mbecker20 3dd2b97873 add polling for deployment state and logs 2023-02-11 20:17:13 +00:00
mbecker20 3c805ebbf7 fix deployment action build A tag styling 2023-02-11 19:36:36 +00:00
beckerinjandGitHub a854160018 Update periphery.config.example.toml 2023-02-08 13:40:00 -05:00
mbecker20 a99d9e5969 make update menu wider 2023-02-08 05:56:09 +00:00
mbecker20 813b6c1182 confirm menu 2023-02-08 05:37:27 +00:00
mbecker20 2958f9589b deployment / build delete wont fail if server disabled / unreachable. 2023-02-08 05:37:12 +00:00
beckerinj 69b4e26176 ConfirmMenuButton 2023-02-07 23:49:27 -05:00
beckerinj 78b00f139d delete server side effects 2023-02-07 23:23:46 -05:00
beckerinj dc1e8de851 widen env 2023-02-07 23:23:18 -05:00
mbecker20 3187b335a3 cli 0.1.20 2023-02-07 20:12:20 +00:00
beckerinj 54b5a2b420 add logrotate to mongo startup 2023-02-07 15:10:36 -05:00
beckerinj 14c6bd00a8 use the scroller class for LogContainer 2023-02-02 16:14:11 -05:00
mbecker20 e9c3646450 0.1.14 fix deployment builder defaults 2023-01-30 17:45:34 +00:00
mbecker20 4f20257479 0.1.13 improve Builder structs with defaults 2023-01-30 17:24:03 +00:00
beckerinj 65749991de 0.1.12 MonitorClient::new_from_env 2023-01-30 11:50:48 -05:00
mbecker20 237a1d802d handle stuff when server disabled / unreachable 2023-01-28 09:03:00 +00:00
mbecker20 e4336f19f3 default copy server to curr server 2023-01-25 23:08:31 +00:00
mbecker20 c895e5e67f fix selector search behavior when using itemMap 2023-01-25 23:01:11 +00:00
mbecker20 4e4e210736 implement build / deployment copy 2023-01-25 22:53:27 +00:00
beckerinj 09dfc8faa3 cli 0.1.19 add Restart=on-failure to service unit file 2023-01-25 14:58:54 -05:00
mbecker20 3c4f77cc78 0.1.11 custom DockerRunArgs Default implementation 2023-01-25 06:29:09 +00:00
mbecker20 c86880ccdb v0.1.10 make default --network host 2023-01-25 04:01:01 +00:00
beckerinj 9db26a3037 sort the servers 2023-01-24 22:33:02 -05:00
mbecker20 711d27e15e change notification formatting 2023-01-25 02:49:24 +00:00
mbecker20 e1d53598e6 historical stats default 500 length 2023-01-25 02:41:31 +00:00
beckerinj f871bc3e03 auto refresh stats and color red in error 2023-01-24 02:46:39 -05:00
mbecker20 69b359ce4a fix loading more updates when operation selected 2023-01-23 00:24:25 +00:00
mbecker20 0dd914b6e4 wrap summary items 2023-01-22 23:08:33 +00:00
beckerinj f03d0b8930 add links in updates and headers 2023-01-22 17:50:35 -05:00
mbecker20 a672c1cba3 fix update summary 2023-01-22 09:38:28 +00:00
beckerinj 233d9dab33 filter updates by operation 2023-01-22 04:29:46 -05:00
mbecker20 f5ac23834d fix to summary 2023-01-21 09:09:30 +00:00
mbecker20 03bc43b04e improve monitoring 2023-01-21 09:02:37 +00:00
mbecker20 fdbd2a2181 improve updates home, add server, add group 2023-01-21 06:25:49 +00:00
mbecker20 ae9fe5c424 fix open unexpected 2023-01-21 04:55:28 +00:00
mbecker20 7de10b7277 serverchildren 2023-01-21 04:49:30 +00:00
mbecker20 8c1f4d7786 fix parse show_builds 2023-01-20 05:21:26 +00:00
beckerinj f3e84b52c6 try to fix updates 2023-01-20 00:12:47 -05:00
beckerinj d64c46f44d fixes 2023-01-19 23:42:26 -05:00
beckerinj a6a58a25be server info tab 2023-01-19 23:36:38 -05:00
mbecker20 37046ddbd8 add back home screen summary / updates 2023-01-20 02:48:22 +00:00
beckerinj 6f697d292a show builds on deployment page 2023-01-19 21:05:53 -05:00
beckerinj 4098c6b487 create api secret frontend 2023-01-19 00:10:06 -05:00
mbecker20 d2844b6558 enable scroll again 2023-01-18 09:34:46 +00:00
mbecker20 59eb63bcda 0.1.9 add 15-sec to Timelength options 2023-01-18 09:15:36 +00:00
mbecker20 7842ac5c45 need to add timelength here too 2023-01-18 09:01:25 +00:00
mbecker20 ba7b6db5b0 update async timing util to 0.1.14 2023-01-18 08:55:50 +00:00
mbecker20 3648a6efd4 handle permissions 2023-01-18 06:22:13 +00:00
mbecker20 f96ee3f1e8 fix permissions access for actions 2023-01-18 05:03:38 +00:00
mbecker20 f0a9b4f5a6 update async_timing_util to 0.1.13 2023-01-18 04:51:31 +00:00
beckerinj f01c159f38 Merge branch 'responsive' 2023-01-17 23:27:18 -05:00
beckerinj 79c587c892 improve frontend responsive behavior 2023-01-17 23:26:58 -05:00
mbecker20 9f4a1625ff attach version to deployment update 2023-01-17 04:39:37 +00:00
mbecker20 3b331e1df7 take timestamp upon recv current stat 2023-01-17 03:53:30 +00:00
mbecker20 fb067c15ff element should be func 2023-01-16 23:29:57 +00:00
mbecker20 f4bba8febc improve sizes of some inputs 2023-01-16 23:02:21 +00:00
mbecker20 bf442f5cdf timeout on health check 1 second 2023-01-16 22:49:33 +00:00
mbecker20 447e41c0af add health check before all requests to peripheries 2023-01-16 22:38:10 +00:00
mbecker20 5901992d80 cli 0.1.16 dont install periphery from crates by default 2023-01-16 21:46:37 +00:00
mbecker20 13e8ad93e2 cli 0.1.15 fix --yes param to skip manual enter 2023-01-16 21:37:32 +00:00
mbecker20 66daa1ac17 cli 0.1.14 gen systemd file pointing to bin in .monitor 2023-01-16 21:31:15 +00:00
beckerinj 3622394751 move deployment permissions to top level tabs like others 2023-01-16 14:27:29 -05:00
mbecker20 53ab799d9b I guess the process filter is kind of usable now 2023-01-16 03:30:56 +00:00
mbecker20 5d0563968b fix build actions height 2023-01-16 02:33:57 +00:00
beckerinj 6e9b692328 fix currentstats mostly 2023-01-15 21:17:55 -05:00
beckerinj de7ddd2224 improve historical stats and add server 2023-01-15 20:46:03 -05:00
beckerinj db82a2d44e improve page layouts 2023-01-15 06:06:08 -05:00
beckerinj ee46c86106 log on daily update 2023-01-14 23:21:59 -05:00
beckerinj 756490bc0c dont sort groups procedures 2023-01-14 23:15:38 -05:00
beckerinj a483283352 implement groups create delete add remove 2023-01-14 23:12:33 -05:00
beckerinj 399e4bfd40 move stats to http poll 2023-01-14 03:59:17 -05:00
beckerinj d1df2818b5 move current stats to polling http 2023-01-14 03:58:20 -05:00
mbecker20 5438ca87fb don't log stats object 2023-01-13 05:58:00 +00:00
mbecker20andGitHub 20a2a660a0 Merge pull request #4 from mbecker20/next
Next
2023-01-13 00:43:46 -05:00
mbecker20andGitHub f9d234908b Merge branch 'main' into next 2023-01-13 00:42:14 -05:00
beckerinj 56b21f0d9e fix core historical stats query filter: specify server_id 2023-01-12 17:08:09 -05:00
mbecker20 d604b28d91 filter charts on undefined 2023-01-12 20:20:42 +00:00
mbecker20 d227f2c311 fix login css width to not overflow 2023-01-12 19:58:11 +00:00
mbecker20 a1acac1479 remove width 100vw in app css class 2023-01-12 19:43:28 +00:00
mbecker20 805ebe55ce smaller stats bars 2023-01-12 05:51:32 +00:00
mbecker20 3f478fefdf 0.1.8 add process start time 2023-01-12 05:07:13 +00:00
mbecker20 809be61e9c cli 0.1.13 periphery systemd needed to run 'loginctl enable-linger $USER' 2023-01-12 04:42:29 +00:00
mbecker20 cfa3dd537d cli 0.1.12 specify whether to --add-host to core container 2023-01-12 04:14:25 +00:00
mbecker20 511efdc113 cli 0.1.11 fix docker run. dont fail when there is no existing container 2023-01-12 00:24:41 +00:00
mbecker20 34a6ac3be3 cli 0.1.10 pass --yes or -y to skip requirement for user to press enter 2023-01-11 22:43:26 +00:00
mbecker20 1674f066ea cli 0.1.9 try fix to periphery start systemd 2023-01-11 22:22:57 +00:00
mbecker20 572560d5b2 cli 0.1.8 start periphery with systemd 2023-01-11 22:08:16 +00:00
mbecker20 34822d6d19 periphery 0.1.6 2023-01-11 19:29:21 +00:00
mbecker20 6655cb43b5 cli 0.1.7 pass repo dir to periphery gen_config 2023-01-11 10:45:07 +00:00
mbecker20 7060926854 add cpu freq and avg system load 2023-01-11 10:03:48 +00:00
mbecker20 a19c339857 show sys info and, load, cpu freq on stats 2023-01-11 09:58:23 +00:00
mbecker20 2cc86a8f21 0.1.6 2023-01-11 09:12:53 +00:00
mbecker20 5adbba61ec increase temp threshold to 85% of critical 2023-01-11 08:51:18 +00:00
mbecker20 d0540669b4 core and periphery 0.1.5 2023-01-11 08:44:16 +00:00
mbecker20 4fb3eb12ba 0.1.5 2023-01-11 08:42:09 +00:00
mbecker20 f885398d7c 0.1.4 across all crates 2023-01-11 06:52:02 +00:00
mbecker20 bda5a93ea4 helpers 0.1.3 2023-01-11 06:29:40 +00:00
mbecker20 713d7680c1 helpers 0.1.3 update types 2023-01-11 06:28:48 +00:00
mbecker20 3b574341f2 types 0.1.4 fix extra_args update diff 2023-01-11 06:22:25 +00:00
mbecker20 664a585bdd frontend for extra args 2023-01-11 06:21:44 +00:00
mbecker20 0a0bf55204 periphery 0.1.3 update types and helpers 2023-01-11 05:27:13 +00:00
mbecker20 b3405a8ab9 periphery 0.1.3 update types and helpers version 2023-01-11 05:25:16 +00:00
mbecker20 7693993d18 deployment can have extra args 2023-01-11 05:20:26 +00:00
mbecker20 89e16ef715 types 0.1.3 pass any extra args to docker run command 2023-01-11 05:08:35 +00:00
mbecker20 199a0e0517 remove unused mount filter 2023-01-11 04:25:48 +00:00
mbecker20 ca80fb4d28 periphery 0.1.2 remove disk filter 2023-01-10 17:04:50 +00:00
mbecker20 143d855ad7 cli v0.1.2 start core container with --add-host option 2023-01-10 16:53:34 +00:00
mbecker20 aaea572c4f update tokio version 2023-01-10 09:41:10 +00:00
mbecker20 41d86e1f34 fix monitor client 2023-01-10 09:38:05 +00:00
mbecker20 00bae80410 client 0.1.2 2023-01-10 09:30:17 +00:00
mbecker20 ef0522b200 monitor cli 0.1.1 2023-01-10 09:29:07 +00:00
mbecker20 f61f38be7e periphery v0.1.1 2023-01-10 09:00:48 +00:00
mbecker20 120877bfb5 helpers v0.1.1 2023-01-10 08:59:12 +00:00
mbecker20 3587818775 types v0.1.2 2023-01-10 08:57:45 +00:00
mbecker20 1f2cf5a848 show system procs 2023-01-10 08:54:25 +00:00
mbecker20 d9e4e5b390 system stats views working 2023-01-10 08:32:16 +00:00
mbecker20 4f965cde2d improve charts, historical and current graphs 2023-01-10 06:37:10 +00:00
mbecker20 662df40aaf current stats page 2023-01-10 02:56:22 +00:00
mbecker20 b41486fb20 realtime current stats heatbar 2023-01-09 07:47:00 +00:00
mbecker20 6acbc19c6a more accurate comp temp sort 2023-01-09 06:34:02 +00:00
mbecker20 01dfdd03fe sort the components and processes 2023-01-09 06:30:56 +00:00
mbecker20 5dc335595e core will auto prune images daily on servers with feature enabled 2023-01-09 05:53:20 +00:00
mbecker20 7c5cd1553d show build_build as just build in update menu, and fix build listener url 2023-01-09 05:39:22 +00:00
mbecker20 c78c89da37 pull image before remove container to minimize downtime 2023-01-09 05:24:37 +00:00
mbecker20 f9f3b276c8 fix default config file 2023-01-09 05:16:30 +00:00
mbecker20 e982f5a6f2 periphery systemd service file 2023-01-09 05:13:13 +00:00
mbecker20 ba0f76fd59 periphery as a service 2023-01-09 05:11:30 +00:00
mbecker20 e26769a787 get periphery version route 2023-01-09 03:54:16 +00:00
mbecker20 cffe3b1428 add permissions map to action 2023-01-09 02:12:35 +00:00
mbecker20 82f9076f3e spawn command handler 2023-01-09 01:36:12 +00:00
mbecker20 80438e7a74 run arbitrary command on periphery 2023-01-09 01:34:15 +00:00
mbecker20 8453f9ac5f handle build version 2023-01-09 00:02:35 +00:00
mbecker20 a9834a9997 fix to build last_built_at parsing 2023-01-08 08:31:36 +00:00
mbecker20 772aca95f9 fix to docker build command parsing 2023-01-08 08:25:05 +00:00
mbecker20 e1b1ee3f8d cli point to correct image 2023-01-08 08:13:06 +00:00
mbecker20 91b640cd90 disk io 2023-01-08 08:09:12 +00:00
mbecker20 47ed7d8d5f lazy load stats 2023-01-08 07:52:30 +00:00
mbecker20 af948edbea make standalone stats page 2023-01-08 07:50:47 +00:00
mbecker20 e18cd2eebb select build version for monitor build 2023-01-08 06:11:34 +00:00
mbecker20 2e5f2d11b4 add more info on stats page 2023-01-08 03:08:45 +00:00
mbecker20 2906eaf5f5 server stats page 2023-01-08 02:54:59 +00:00
mbecker20 4bc8fc4b25 fix peirphery client not passing through disks query 2023-01-07 23:46:09 +00:00
mbecker20 487bf515ba spawn threads to complete tasks requested over http 2023-01-07 21:45:57 +00:00
mbecker20 9378954551 improve frontend config design 2023-01-07 09:44:44 +00:00
mbecker20 6b366fb0e2 get stats api 2023-01-07 08:01:44 +00:00
mbecker20 a5af235cef start on github webhook listener 2023-01-05 08:41:58 +00:00
mbecker20 b0b991115b user permission management working 2023-01-05 06:55:41 +00:00
mbecker20 f2db575c70 implement owners management 2023-01-05 06:33:14 +00:00
mbecker20 5628d92b3c add status to update menu 2023-01-05 05:36:23 +00:00
mbecker20 ba994e80f6 make simple tabs to use on home screen 2023-01-05 05:30:55 +00:00
mbecker20 db9f633e89 container log should be GET method 2023-01-05 05:20:33 +00:00
mbecker20 7aaececa87 deployment page loads 2023-01-05 05:14:25 +00:00
mbecker20 1c6f31cfea finish deployment refactor 2023-01-05 05:09:06 +00:00
mbecker20 88f46a04f0 add deployment page 2023-01-05 05:06:01 +00:00
mbecker20 8b0fd2326f add cli publish task 2023-01-05 03:17:09 +00:00
mbecker20 86af789dd3 cli periphery seems to be working 2023-01-05 03:16:37 +00:00
mbecker20 243f54ec11 use cli to start periphery as daemon 2023-01-05 02:32:21 +00:00
mbecker20 4cc1f4458e start up periphery with cli 2023-01-05 02:22:15 +00:00
mbecker20 823a735ef7 prep monitor_periphery for publish 2023-01-05 02:13:22 +00:00
mbecker20 7782412c9b helpers use crates.io monitor_types 2023-01-05 02:09:41 +00:00
mbecker20 ccd7d715b9 add publish helpers task 2023-01-05 02:07:44 +00:00
mbecker20 a192b142d4 update helpers to be on crates.io 2023-01-05 02:07:10 +00:00
mbecker20 277d5fe662 update licenses and descriptions 2023-01-05 02:03:00 +00:00
mbecker20 44b9eb462e fix monitor_types license 2023-01-05 02:01:09 +00:00
mbecker20 680bb55321 start prep monitor_periphery for crates.io 2023-01-05 01:57:55 +00:00
mbecker20 33e0568782 cli to start up periphery as daemon 2023-01-05 01:55:00 +00:00
mbecker20 2b1b88ce3c periphery doesn't log any secret values on startup 2023-01-05 01:20:19 +00:00
mbecker20 bd02b9e281 fix build and deploy 2023-01-05 01:04:10 +00:00
mbecker20 85c5b146d4 fix builds getting stuck. update core dockerfile 2023-01-04 23:26:12 +00:00
mbecker20 ac3d17ce82 fix updates pagination 2023-01-04 22:41:48 +00:00
mbecker20 f6f94303a5 put id on SystemStatsRecord 2023-01-04 08:26:13 +00:00
mbecker20 53cf644008 record system processes with stats 2023-01-04 08:25:17 +00:00
mbecker20 3dfeb65aab prune system stats 2023-01-04 08:22:02 +00:00
mbecker20 c90e91d78b finish stat collection and slack alerts, daily update. async mutex 2023-01-04 08:01:25 +00:00
mbecker20 17a5d624d9 implement some stats recording. clean up Tab comp 2023-01-03 06:50:23 +00:00
mbecker20 ef8f75b3e2 begin recording system stats 2023-01-02 10:44:48 +00:00
mbecker20 da83afc6f4 stats interval is timelength 2023-01-02 10:18:54 +00:00
mbecker20 d77d07cb52 attach id of deleted item to delete update 2023-01-02 09:43:40 +00:00
mbecker20 161ac34afa fix Operation for delete build update 2023-01-02 09:34:42 +00:00
mbecker20 e9685ce71a add build page 2023-01-02 09:09:32 +00:00
mbecker20 bdf4e9d6c6 pass icon dir in frontend env 2023-01-02 08:31:39 +00:00
mbecker20 5e205efd29 add user management features 2023-01-02 08:15:43 +00:00
mbecker20 a491f206c9 create channel to handle stats stream in client 2023-01-02 07:16:55 +00:00
mbecker20 a6d655b42e add usernames cache to state 2023-01-02 06:33:18 +00:00
mbecker20 f5fa676db6 builds and deployments under server 2023-01-02 05:58:22 +00:00
mbecker20 8b16aff3bf implement home, servers, implement container log passthrough 2023-01-02 05:28:38 +00:00
mbecker20 3006aa7fa3 basically get server page 2023-01-02 00:44:20 +00:00
mbecker20 d5861274de add get_username method on client 2023-01-01 21:18:24 +00:00
mbecker20 a927571e29 add get_username to client 2023-01-01 20:51:57 +00:00
mbecker20 9998debb96 get username api 2023-01-01 20:40:01 +00:00
mbecker20 956805603e get home screen working pretty much 2023-01-01 08:00:08 +00:00
mbecker20 4a4bf197a9 home screen update views 2023-01-01 02:15:29 +00:00
mbecker20 0845dc04e1 summary 2022-12-31 21:42:58 +00:00
mbecker20 6104e5aa5a add summary component 2022-12-31 11:17:57 +00:00
mbecker20 1d717dff7a remove core ws stats logs 2022-12-31 10:28:29 +00:00
mbecker20 c2702869c1 test the stats ws connection with monitor client 2022-12-31 10:26:37 +00:00
mbecker20 58a5accd83 link up the stats websocket 2022-12-31 09:42:41 +00:00
mbecker20 de937707e1 Periphery config repo dir parse as PathBuf 2022-12-31 06:23:07 +00:00
mbecker20 0ceecee604 a bunch of stuff 2022-12-31 05:42:44 +00:00
beckerinj 5d0c14201d start on processes in stats 2022-12-30 12:36:13 -05:00
mbecker20 d0d6271d8f frontend topbar search 2022-12-30 07:49:30 +00:00
mbecker20 90884904de kind of get search working 2022-12-30 06:23:09 +00:00
mbecker20 b042494b44 get system component temps etc 2022-12-30 05:56:16 +00:00
mbecker20 80ced82131 implement configurable login options 2022-12-30 05:05:45 +00:00
mbecker20 f74faaecf8 google oauth working 2022-12-29 09:09:04 +00:00
mbecker20 3b6d3af7bb implement google oauth 2022-12-29 07:59:50 +00:00
mbecker20 15662c951d topbar ws indicator and userPermissionsOnEntity 2022-12-28 06:08:09 +00:00
mbecker20 de8c59bb61 clean up the log for unauthorized ip access 2022-12-27 05:51:06 +00:00
mbecker20 9cde83de0e update gen_config in cli to support adding allowed_ips 2022-12-27 05:41:14 +00:00
mbecker20 0a5256cbd7 periphery allowed ips 2022-12-27 05:03:24 +00:00
mbecker20 99ce35ce1d put container state on list deployment return, including NotCreated and Unknown 2022-12-26 23:18:17 +00:00
mbecker20 4d3feb52c7 make sure user has execute permissions on resources in procedure 2022-12-26 22:39:21 +00:00
mbecker20 eb79e8726d fix type import issue 2022-12-26 22:21:08 +00:00
mbecker20 3c055544cc move Timelength to local types for typeshare 2022-12-26 22:14:57 +00:00
mbecker20 0d4118dac8 add crud for groups at all client levels 2022-12-26 19:55:33 +00:00
mbecker20 dac9c05a89 change default periphery stats polling rate to 5-sec 2022-12-26 19:07:32 +00:00
mbecker20 1dbc2909e2 start making crud for groups 2022-12-26 06:32:36 +00:00
mbecker20 6fc4a0627c running as daemon seems to work! 2022-12-26 06:24:38 +00:00
mbecker20 4a99ccc1a9 run periphery as daemon 2022-12-25 22:59:03 +00:00
mbecker20 46dc663385 create the Group type to group all the resources (including groups for nesting 2022-12-25 06:20:22 +00:00
mbecker20 d2a3a6cddf refactor types lib into split files for easier finding of things 2022-12-25 05:46:21 +00:00
mbecker20 0d140b420e periphery runs fine lcoally 2022-12-24 06:20:25 +00:00
mbecker20 6be463475c change update send channel to tokio::sync::broadcast 2022-12-24 06:10:13 +00:00
mbecker20 858cead89d rename stats_interval to stats_polling_rate 2022-12-24 05:28:10 +00:00
mbecker20 ba439d6f5f improve periphery stats with modify interval, modify user updates, frontend state 2022-12-23 05:41:06 +00:00
mbecker20 9c09906bdd implement get updates list 2022-12-22 07:05:18 +00:00
mbecker20 90173a30e7 add topbar to FE and some state hooks 2022-12-22 01:06:42 +00:00
mbecker20 902bf0c981 frontend login guard and page, deployment / build copy route 2022-12-21 06:21:23 +00:00
mbecker20 5ac3239f4f pull deployment in clients 2022-12-21 05:13:25 +00:00
mbecker20 3a0fa36d19 pull deployment repo 2022-12-21 05:10:17 +00:00
mbecker20 3b0f919baa implement correct busy logic 2022-12-21 04:45:27 +00:00
mbecker20 b2226efd59 implement a not good busy guard 2022-12-20 07:45:25 +00:00
mbecker20 a0beb27072 small refactor on the ts client 2022-12-19 07:32:47 +00:00
mbecker20 5cd68191fc implement a lot of run procedure 2022-12-19 00:59:00 +00:00
mbecker20 b9978f531a fill out the ts client 2022-12-18 08:10:14 +00:00
mbecker20 11a4379fb6 add additional typescript type gen from core 2022-12-18 06:00:23 +00:00
mbecker20 090c4a6dc7 generate typescript types in frontend 2022-12-18 05:44:41 +00:00
mbecker20 0b3bd899fe move to string timestamps 2022-12-18 05:42:58 +00:00
mbecker20 0e913ac420 add shared util components 2022-12-18 03:23:50 +00:00
mbecker20 3e5df637fd add frontend public 2022-12-18 02:51:05 +00:00
mbecker20 81e96861d7 only show size of / and paths including "external" 2022-12-18 02:41:36 +00:00
mbecker20 6284a48a3a some consistency fixes 2022-12-18 00:14:46 +00:00
mbecker20 c0854c7923 port 8000 2022-12-17 23:35:40 +00:00
mbecker20 b4c98820d9 cli | replace ~ with env var HOME in path 2022-12-17 23:07:48 +00:00
beckerinj 1cbb7d6bfd fix test 2022-12-17 01:27:38 -05:00
beckerinj be58cec1c9 add start stop remove container 2022-12-17 01:27:06 -05:00
beckerinj 839af15311 create procedure and update mungos 2022-12-16 02:50:07 -05:00
beckerinj a985139f9c add procedures to api and add functions in monitor_client 2022-12-15 00:50:07 -05:00
beckerinj 7719c17227 outline functions on state to work with procedures 2022-12-15 00:24:57 -05:00
beckerinj b92111c7c2 leverage build args to build slim / full periphery 2022-12-14 23:59:17 -05:00
beckerinj a3ceef26f8 cli specify restart mode 2022-12-14 17:58:35 -05:00
beckerinj e31515f6fd get cli working again 2022-12-14 12:55:02 -05:00
beckerinj 38be2c53e7 add color and remove cli deps 2022-12-14 03:09:01 -05:00
beckerinj 1d64040129 fill out cli scripts 2022-12-13 02:53:58 -05:00
beckerinj ae9a1cb89e create full server / deployment / build 2022-12-13 02:18:44 -05:00
beckerinj 9858a7a5ce start mongo cli 2022-12-12 02:48:36 -05:00
beckerinj e5dec41b49 slim and full periphery. updated stats type 2022-12-12 00:46:27 -05:00
beckerinj b98f4a6ec1 add better error handing 2022-12-11 13:05:37 -05:00
beckerinj ba431638b7 gen periphery config with cli 2022-12-11 12:42:53 -05:00
beckerinj ffeca7658a fill out monitor client permissions and secret calls 2022-12-11 12:29:48 -05:00
beckerinj daf06a33f8 start on cli - generate core config 2022-12-11 04:15:19 -05:00
beckerinj e81b6a14de list + prune images networks containers 2022-12-11 02:19:52 -05:00
beckerinj c79469af30 go back to copy . . 2022-12-10 23:37:10 -05:00
beckerinj d761e49a64 only copy what each dockerfile needs to improve caching 2022-12-10 23:12:59 -05:00
beckerinj 0f865be593 first user auto enabled and admined 2022-12-10 20:15:23 -05:00
beckerinj 4130bc1726 add created_at and updated_at fields 2022-12-10 19:14:21 -05:00
beckerinj 5559c3de42 handle version in deployment from build 2022-12-10 18:43:18 -05:00
beckerinj 1884693ca6 add basic container stats to core get / list deployment 2022-12-10 18:16:43 -05:00
beckerinj 1eb707a759 get docker compose testing setup working 2022-12-10 15:55:41 -05:00
beckerinj 91246b7078 add routes to update build at id. build stops if pre_build fails. 2022-12-10 00:44:56 -05:00
beckerinj 31dd47aac8 create and test deploy 2022-12-08 00:29:34 -05:00
beckerinj 644a3c795e build_build 2022-12-07 19:55:41 -05:00
beckerinj 521976e57e remove all DbExtension 2022-12-07 15:42:57 -05:00
beckerinj f1df4f36df move actions to actions folder as fn impl on State 2022-12-07 03:51:58 -05:00
beckerinj e8e566ea62 add end ts to reclone update 2022-12-06 01:53:33 -05:00
beckerinj b0a865ddb8 change clone repo update status to complete 2022-12-06 01:50:13 -05:00
beckerinj 937b271686 update things, reclone 2022-12-06 01:31:13 -05:00
beckerinj c4a533bc4b cleanup 2022-12-05 03:13:59 -05:00
beckerinj 16aa58482f update build 2022-12-05 02:58:04 -05:00
beckerinj 1674825a94 apply Diff to all the updatable structs 2022-12-04 20:41:51 -05:00
beckerinj a382b4d589 delete repo when deleting build 2022-12-04 04:36:36 -05:00
beckerinj 22a8845c53 clean up old stats 2022-12-04 04:11:27 -05:00
beckerinj 34b60c755b container stats 2022-12-04 01:59:47 -05:00
beckerinj 38d7126959 create test bin for testing system with monitor client 2022-12-03 02:25:34 -05:00
beckerinj 00a89ccb48 implement secret creating and deleting 2022-12-02 02:40:44 -05:00
beckerinj 4e518d90ad made login route for secret usage 2022-12-02 00:22:04 -05:00
beckerinj 0d4bacd892 fix description monitor client 2022-12-01 23:17:03 -05:00
beckerinj d876634899 add client readme and publish client task 2022-12-01 23:14:07 -05:00
beckerinj 8c8b4ea488 create permissioned delete routes 2022-12-01 22:58:22 -05:00
beckerinj 209f6ebb87 update types package 2022-12-01 01:34:25 -05:00
beckerinj 15faefff93 delete deployment 2022-12-01 01:32:54 -05:00
beckerinj bf80b34e8e rename monitor_types and update axum version 2022-12-01 00:33:00 -05:00
beckerinj 8c87102116 update target 2022-11-29 01:39:17 -05:00
beckerinj 500e180241 update status enum 2022-11-24 23:39:00 -08:00
beckerinj 20997cf5ac implement get server stats on core 2022-11-24 22:30:03 -08:00
beckerinj 96127b52e6 add docker build tasks 2022-11-24 13:32:50 -08:00
beckerinj 192363bb64 get periphery docker build working 2022-11-24 13:30:08 -08:00
beckerinj 8d7b0625b0 permissions update returns message 2022-11-24 13:05:45 -08:00
beckerinj 47717760b2 move permissions admin check to early return 2022-11-24 13:00:15 -08:00
beckerinj 9c5d2da199 refactor permissions a bit to reduce duplication 2022-11-24 12:59:06 -08:00
beckerinj 556f9d7d96 finish update permissions route for builds and deployments 2022-11-24 12:54:54 -08:00
beckerinj e5bd6493f5 basic add permissions 2022-11-24 00:54:54 -08:00
beckerinj 7a4cf8be2d delete update "entity_type" 2022-11-23 12:31:17 -08:00
beckerinj 4a7c0008e0 health check? 2022-11-23 13:13:32 -05:00
beckerinj d15d2ca56b plan to inject arbitrary string secrets defined in periphery config into deployment configuration 2022-11-21 19:35:25 -05:00
beckerinj a91fd11844 improve permissions code 2022-11-21 00:02:39 -05:00
beckerinj 37d5606eb3 list servers 2022-11-20 23:46:36 -05:00
beckerinj 56269b2fcf add dockerfiles and add version tags to docker builds 2022-11-20 22:24:59 -05:00
beckerinj abc1ad4356 create for server / deployment 2022-11-20 20:14:16 -05:00
beckerinj 052756140b broadcast updates to clients, and implement create build 2022-11-20 19:52:23 -05:00
beckerinj 6f03bd5827 something 2022-11-16 02:35:43 -05:00
beckerinj 437052b58b start implementing the core websocket 2022-11-15 02:40:57 -05:00
beckerinj e35d3473c7 add start / end ts, in progress to update 2022-11-14 02:22:13 -05:00
beckerinj f48703aef7 renome config example folder 2022-11-14 01:05:48 -05:00
beckerinj 393e202102 move config files to dedicated folder 2022-11-14 01:05:26 -05:00
beckerinj 809732e7f3 build route 2022-11-13 23:29:12 -05:00
beckerinj a7abca2038 implement docker build 2022-11-13 23:19:41 -05:00
beckerinj 475f6774bf implement more periphery routes + periphery client 2022-11-13 02:14:36 -05:00
beckerinj d4a775025f implement clone build / deployment repo 2022-11-13 00:01:53 -05:00
beckerinj 21c8fac0a4 configs 2022-11-12 19:35:28 -05:00
beckerinj d0051016fc dont really need the json example files 2022-11-12 01:36:27 -05:00
beckerinj b495593b59 add accounts route in periphery 2022-11-11 17:40:57 -05:00
beckerinj aaa8d7e97d get accounts on builder 2022-11-11 17:34:53 -05:00
beckerinj af126c70a6 add a bunch of secret / config examples. begin builder 2022-11-11 17:15:29 -05:00
beckerinj 1a4e3fa55a pass core config as toml 2022-11-11 16:00:57 -05:00
mbecker20 e740128baf parse toml secrets 2022-11-11 15:08:29 -05:00
beckerinj fdf5626a93 fmt 2022-11-11 11:51:10 -05:00
beckerinj 40c62234bb write the basic git clone function 2022-11-11 04:11:27 -05:00
beckerinj b96a6cf7c2 implement container stuff in periphery client 2022-11-09 01:52:21 -05:00
beckerinj 6728507914 retrieve system stats 2022-11-09 01:28:33 -05:00
beckerinj f679fa2c0c start looking at stats 2022-11-08 02:48:59 -05:00
beckerinj ced8aa661b begin implement periphery docker functions 2022-11-08 02:37:37 -05:00
beckerinj b936ff3e36 work on periphery deploy client 2022-11-07 00:26:06 -05:00
beckerinj 841b458f05 start implementing the periphery client 2022-11-06 22:50:01 -05:00
mbecker20 fd13240134 attach userid and is_admin to request 2022-11-06 20:16:17 -05:00
mbecker20 c70917382f implement auth extension 2022-11-06 20:05:51 -05:00
beckerinj 8d2ea8ae87 prog2 2022-11-06 04:57:29 -05:00
beckerinj d4a91f7240 connect up some auth routing 2022-11-06 04:30:00 -05:00
beckerinj 4ba8c0f380 prog 2022-11-06 04:15:02 -05:00
beckerinj cb9b482340 start local login implement 2022-11-06 02:57:28 -05:00
beckerinj 797f33e0eb restructure and work on docker client 2022-11-05 22:22:27 -04:00
beckerinj 6a4991354b clients galore 2022-11-05 03:26:58 -04:00
beckerinj 336646c280 pretty much fill out the types 2022-10-10 23:30:53 -04:00
beckerinj 2664ba939e define some types 2022-10-10 20:55:46 -04:00
beckerinj b1e2328d54 allow stats view when server is not ok or disabled 2022-09-27 19:38:32 -04:00
beckerinj 47c3680d8c add bollard to deps 2022-09-25 17:43:21 -04:00
beckerinj f281f68a8f scafolding for next 2022-09-25 17:27:06 -04:00
beckerinj 1852ee5216 delete everything for next version 2022-09-25 16:59:59 -04:00
beckerinj abfa6dbf65 change container start to stop on restarting loop 2022-09-25 03:22:10 -04:00
beckerinj 3668b6b765 show deployment options when restarting 2022-09-24 22:19:40 -04:00
beckerinj 22a641c07e fix selecting build for deployment when search for build 2022-09-22 14:15:32 -04:00
beckerinj 87548b577f server shows disabled on home 2022-08-25 10:55:22 -04:00
beckerinj de008d7829 unneeded import 2022-08-19 17:37:33 -04:00
beckerinj c5c9171fda remove unneeded import 2022-08-19 00:17:42 -04:00
beckerinj 53447fc605 add enter animation for updates 2022-08-18 14:14:06 -04:00
beckerinj 97f933ee32 improve daily updates with emojis pointing to warning location 2022-08-17 10:12:28 -04:00
beckerinj ada8169c2e replace solid-apexcharts with easy made one 2022-08-16 14:52:41 -04:00
beckerinj ec4c83b2dd add build-development 2022-08-15 00:43:22 -04:00
beckerinj c00d404d30 remove console log 2022-08-15 00:37:32 -04:00
beckerinj 0920499358 tabs gap evened out 2022-08-14 23:59:01 -04:00
beckerinj a197307101 add filter to servers 2022-08-14 23:33:23 -04:00
beckerinj 2b571bfd0f change default loading size 2022-08-14 03:07:26 -04:00
beckerinj de59295f5a cant do this skip thing bc stats not collected at even time frames 2022-08-14 02:31:24 -04:00
beckerinj 71f33e4f33 fix loggin message at startup 2022-08-13 15:19:19 -04:00
beckerinj 94486f1e14 lazy load graph jsx 2022-08-13 14:54:09 -04:00
beckerinj 244436251d make dev easier with frontend env vars 2022-08-13 14:43:14 -04:00
beckerinj 13745ea6e7 daily update utc hour from env (default 10am est) 2022-08-13 03:57:03 -04:00
beckerinj 44d1420fd6 wait until 11 and wait for even 5 minute to start stat check 2022-08-13 02:57:28 -04:00
beckerinj 9936084a0e add return to front 2022-08-12 15:24:41 -04:00
beckerinj a676797358 move left and right on stat graphs 2022-08-11 23:41:05 -04:00
beckerinj 5691715647 stat graphs working 2022-08-11 11:49:14 -04:00
beckerinj 3a78de0b57 fix stats not having custom model. start making graph 2022-08-10 23:06:51 -04:00
beckerinj eed36b22de create setup for stat graph center menu 2022-08-09 23:53:12 -04:00
beckerinj 908bf583b8 fix to remove server 2022-08-09 12:15:31 -04:00
beckerinj eb4add5199 click on build in deployment actions navigates to build 2022-08-09 01:51:10 -04:00
beckerinj 7b1c01f402 add prune containers functionality 2022-08-09 01:46:05 -04:00
beckerinj d1b1fa40e6 filter server stats by id 2022-08-09 01:20:10 -04:00
beckerinj 54800a7d2e fix search 2022-08-09 00:52:42 -04:00
beckerinj 00fe14bae0 collect stats, frontend query 2022-08-07 23:06:51 -04:00
beckerinj a667c8cc3a replace with slackNotifier2 + statCollection 2022-08-07 22:59:13 -04:00
beckerinj 49729e8ea9 back to localhost 2022-08-07 22:13:28 -04:00
beckerinj c7f3e376e6 responsive frontend 2022-08-07 15:57:42 -04:00
beckerinj 8522ef7edb try this 2022-08-07 15:20:08 -04:00
beckerinj 6fa851b6f8 nav home with shift + h 2022-08-07 04:26:20 -04:00
beckerinj 25b6468ac5 only load stats if server is OK 2022-08-06 14:47:35 -04:00
beckerinj f8c85e733f get build updates on relevant deployment over ws 2022-08-06 14:28:15 -04:00
beckerinj b5b3d79e53 pull buildID on getDeployments 2022-08-06 14:15:54 -04:00
beckerinj d2cb8b0627 cache stats correctly 2022-08-06 13:34:42 -04:00
beckerinj 44ecda3c67 cleanup 2022-08-06 11:14:40 -04:00
beckerinj 05fa885753 fix to showing build on deployment page 2022-08-06 11:09:59 -04:00
beckerinj ba95b8267b unneccesary import 2022-08-06 02:53:15 -04:00
beckerinj 55ada6fccc should build updates on attached deployment / build action from deployment page 2022-08-06 02:51:52 -04:00
beckerinj f4590fee93 remake update card for home 2022-08-06 02:17:29 -04:00
beckerinj 3ce02ef01a clean 2022-08-06 01:49:16 -04:00
beckerinj d7b5966f8b back to localhost 2022-08-06 01:49:02 -04:00
beckerinj 52543644ea stats tofixed 2022-08-06 01:48:11 -04:00
beckerinj dc70562675 increase server name font size and remove opacity 2022-08-06 01:43:58 -04:00
beckerinj 0299645ba3 new monitor home screen 2022-08-06 01:35:19 -04:00
beckerinj 150aeae285 add monitor_mount to ignore 2022-08-06 00:11:41 -04:00
beckerinj d25f3dfde7 ignore secrets dir 2022-08-06 00:10:09 -04:00
beckerinj 28505343c9 remove stats interval 2022-08-01 00:50:24 -04:00
beckerinj a8e933d4d0 start record server stats 2022-07-31 23:42:15 -04:00
beckerinj dc647b88ad account for "unknown" state 2022-07-31 18:36:26 -04:00
beckerinj 5e67a0346a fix container stats scrolling 2022-07-29 11:46:18 -04:00
beckerinj d4ad4fe5ff summary doesnt show zeros and docker stats scrolling 2022-07-29 01:00:52 -04:00
beckerinj 2e16d58f5d fix slack not notifying when toNotify is empty 2022-07-29 00:19:24 -04:00
beckerinj 7314cab3ea add colors to summary 2022-07-26 23:44:45 -04:00
beckerinj 4aa04c774b rename repo actions to frontend 2022-07-26 16:44:53 -04:00
beckerinj d24b661983 auth the websocket messages 2022-07-26 00:01:56 -04:00
beckerinj 904ce56610 periphery prune networks should work 2022-07-25 23:13:52 -04:00
beckerinj c876eb63bb add basic summary for home 2022-07-25 00:13:54 -04:00
beckerinj d881b50154 Merge branch 'main' of https://github.com/mbecker20/monitor 2022-07-19 23:28:52 -04:00
beckerinj 91434914fd fix parseDotEnvToEnvVars when value includes = sign 2022-07-19 23:28:50 -04:00
beckerinj 5ec0e06308 toNotify could be undefined 2022-07-15 13:19:46 -04:00
beckerinj f287836f0b fix slack notify failing bc toNotify undefined 2022-07-12 20:38:10 -04:00
beckerinj 6c59e0b60b add host env var 2022-07-11 23:26:54 -04:00
beckerinj ed46c17422 add delete deployment rest api 2022-07-11 11:44:11 -04:00
beckerinj df303288c2 unneeded deployment busy check 2022-07-11 11:06:38 -04:00
beckerinj 60351b6111 create doesnt auto nav to that new deployment 2022-07-11 10:33:25 -04:00
beckerinj ccc60bdb1b add create buttons 2022-07-10 23:25:02 -04:00
beckerinj dc9e79307a home2 passable. remove sidebar 2022-07-10 23:14:46 -04:00
beckerinj 11f03fbebf create user observable to filter published message by authorization 2022-07-09 03:08:37 -04:00
beckerinj 3cfcc65398 broadcast create deployment 2022-07-09 02:57:02 -04:00
beckerinj 60cf2efdec rename repo mount to frontend 2022-07-09 02:42:34 -04:00
beckerinj 5e14ed5d31 fix to multi search 2022-07-09 02:34:21 -04:00
beckerinj 275753b793 topbar doesn't say monitor 2022-07-09 01:50:24 -04:00
beckerinj e3d3b79e9b fix when toNotify is not defined 2022-07-08 16:44:40 -04:00
beckerinj b14053725b topbar search splits query by space 2022-07-08 09:49:34 -04:00
beckerinj a40e368533 emojis in slack alerts and unreachable alerting 2022-07-06 00:06:40 -04:00
beckerinj b5e65cbb32 24 hr default clear notify limit 2022-07-05 17:35:21 -04:00
beckerinj 9cf422c0b8 added rest routes to create / deploy deployment 2022-07-04 17:19:15 -04:00
beckerinj 1ac3fce257 Merge branch 'main' of https://github.com/mbecker20/monitor 2022-06-30 16:48:02 -04:00
beckerinj c14fcf617d only use helmet if host is https 2022-06-30 16:48:00 -04:00
beckerinj 9373c7eaa1 seperate clear already alerted interval (hours) 2022-06-13 19:59:31 +03:00
beckerinj f80a54497e trim down daily interval 2022-06-10 19:24:43 +03:00
beckerinj 4f3ac512f4 clean up messages 2022-06-10 19:18:57 +03:00
beckerinj a815ddc2ae fix slack notifier formatting? 2022-06-10 19:05:39 +03:00
beckerinj d05703cf04 change all types to plain_text 2022-06-10 18:43:24 +03:00
beckerinj d14ae83cfa try adding blocks under attachments 2022-06-10 18:30:43 +03:00
beckerinj 7ca0f02883 change emphasis 2022-06-10 16:52:34 +03:00
beckerinj 306db2ee1e advanced slack messages 2022-06-10 16:28:03 +03:00
beckerinj 9c37cff49f try catch jwt verify 2022-06-04 21:10:59 +03:00
beckerinj 8137b175c4 info when log actually refreshes 2022-06-03 11:40:55 +03:00
beckerinj b33181edbe fix local url 2022-05-31 23:12:39 +03:00
beckerinj 9443cffe77 log / env var style 2022-05-31 23:12:06 +03:00
beckerinj 406be5128b configure environment 2022-05-31 22:54:03 +03:00
beckerinj 9a734f1381 parse dotenv frontend 2022-05-31 20:06:09 +03:00
beckerinj 4ca689df7e : 2022-05-31 17:39:26 +03:00
beckerinj 499e3b835b dotenv 2022-05-31 17:39:14 +03:00
beckerinj c0d84ed92b parse dot env vars 2022-05-31 17:20:19 +03:00
beckerinj bbd51dac00 clean 2022-05-30 21:36:11 +03:00
beckerinj b1def791ca add pm2 flush support 2022-05-30 13:35:33 +03:00
beckerinj 72faf36719 Merge branch 'main' of https://github.com/mbecker20/monitor 2022-05-29 21:35:26 +03:00
beckerinj e838e139d1 add name to log 2022-05-29 21:35:20 +03:00
mbecker20 7bffef3d00 update next cli version 2022-05-29 21:14:42 +03:00
beckerinj 0866f1c011 support variable number of lines pm2 log 2022-05-29 21:03:15 +03:00
beckerinj 5db44a69a4 github listener auth and branch filtering 2022-05-29 13:54:29 +03:00
beckerinj 12dcbbc956 navigate home on mobile 2022-05-27 20:38:18 +03:00
beckerinj fc8cdd5c58 rename "deployments" to "servers" in sidebar 2022-05-27 20:25:50 +03:00
beckerinj 8493fed2dc daily interval tells when server unreachable 2022-05-27 18:27:57 +03:00
beckerinj a367bcbe95 add post image config 2022-05-27 12:45:05 +03:00
beckerinj 4df5e0b4cd don't need this env 2022-05-27 00:07:28 +03:00
beckerinjandGitHub 214a44eb19 Merge pull request #3 from mbecker20/pm2-frontend
Pm2 frontend
2022-05-26 20:40:21 +03:00
beckerinj 22e2b4785d log looking ok 2022-05-26 20:39:53 +03:00
beckerinj aeb5dd8f9a remove pm2 mount 2022-05-26 19:51:16 +03:00
beckerinj 598ecefc11 add host communication to periphery deploy 2022-05-26 19:51:01 +03:00
beckerinj f164f276ee change host 2022-05-26 19:22:31 +03:00
beckerinj f5190389bb look for pm2 client at 0.0.0.0 2022-05-26 19:13:48 +03:00
beckerinj 3e2d271be2 503 error if can not reach pm2 client 2022-05-26 19:08:35 +03:00
beckerinj 6d3f56a906 fix Log type import 2022-05-26 18:36:36 +03:00
beckerinj 57e6288e05 fix to scss location 2022-05-26 18:35:31 +03:00
beckerinj 63bb0bbd16 remove pm2 from util-node 2022-05-26 18:31:54 +03:00
beckerinj 2df5005ec0 basic frontend 2022-05-26 18:27:51 +03:00
beckerinj d54d1950d9 pm2 updates 2022-05-26 13:42:27 +03:00
beckerinj 0631de0585 pm2 deployment type 2022-05-26 11:37:12 +03:00
beckerinj c2c3e3affd get pm2 commands routed through pipeline 2022-05-26 11:01:35 +03:00
beckerinj 0fe7553f85 remove pm2 locally from periphery (in favor of monitor-pm2 extension 2022-05-25 16:53:55 +03:00
beckerinj 895aeee057 slack username is actually slack user id 2022-05-20 15:56:21 -04:00
beckerinj 6e7a2d51ec fix to region not being updated, and fill out server changelog view fields 2022-05-20 15:52:09 -04:00
beckerinj 1aea53ed5a improve stats view 2022-05-20 13:41:50 -04:00
mbecker20 01afe72e07 add pm2 to core deps 2022-05-20 10:58:04 -04:00
mbecker20 ee5f2ff5c0 update cli version 2022-05-20 10:46:30 -04:00
beckerinj 005c3e6e2d fix to color resolve scss 2022-05-20 10:35:24 -04:00
beckerinj d6d55aaf13 fix to duplicate type / function name 2022-05-20 10:34:00 -04:00
beckerinj b7404cc5be frontend for pm2 processes 2022-05-19 17:25:12 -04:00
beckerinj d8196e81d6 periphery cli deploy mounts the pm2 directory 2022-05-19 17:18:13 -04:00
beckerinj 3827468848 get pm2 process query 2022-05-19 16:26:41 -04:00
beckerinj 7c81f6ad32 remove unneeded dep 2022-05-19 16:09:58 -04:00
beckerinj 55e826ef6f backend to retrieve pm2 processes from periphery 2022-05-19 15:56:52 -04:00
beckerinj 2b1d4149d1 improve slack notifier region readability 2022-05-18 12:51:53 -04:00
beckerinj f7212f5048 search server status smaller font size 2022-05-18 12:46:42 -04:00
beckerinj 861d1066a5 show region on home screen 2022-05-18 11:19:32 -04:00
beckerinj 8ddf1e39d5 remove "region: " its clear enough 2022-05-18 11:12:50 -04:00
beckerinj bb8f65ab57 utilize region in slack notifications 2022-05-18 11:02:43 -04:00
beckerinj cb88af1fad utilize region in views 2022-05-18 10:56:05 -04:00
beckerinj 412d49bd46 Info (region, instance ID) 2022-05-18 10:29:06 -04:00
beckerinj d0ab454e7b disallow non-admins from updating cli commands (security issue) 2022-05-17 17:08:00 -04:00
beckerinj f681e9f057 correct formatting for @ users 2022-05-17 12:54:41 -04:00
beckerinj a562cf825d to notify server 2022-05-17 12:22:54 -04:00
beckerinj 017d863aa2 only usage alert once 2022-05-17 10:55:58 -04:00
beckerinj 1bc68bbb5a only get deployments user has access to 2022-05-13 15:50:11 -04:00
beckerinj 693e5c307a limit access to builds 2022-05-13 15:11:36 -04:00
beckerinj 75a5c0da4f permissioned github / docker accounts 2022-05-13 15:05:44 -04:00
mbecker20 1fb7fce8ce more auth on recieving deployments 2022-05-13 13:51:37 -04:00
beckerinj 185dd5c17d optional custom passkey 2022-05-12 14:04:56 -04:00
mbecker20 a8b9297ae1 stats styling 2022-05-12 12:48:19 -04:00
mbecker20 c44751e82b better docker stats 2022-05-12 12:44:44 -04:00
mbecker20 bedf4fad70 docker stats json 2022-05-12 12:38:56 -04:00
beckerinj 43da0cc6db docker stats json 2022-05-12 12:07:40 -04:00
mbecker20 9b3c9115e1 alert config styling 2022-05-12 11:16:21 -04:00
beckerinj c8dedb8980 customize alert thresholds 2022-05-12 10:55:18 -04:00
beckerinj 98f254263e only show things relevant to user in sidebar 2022-05-11 15:00:49 -04:00
beckerinj 8c1119734a seperate daily servers with ----- 2022-05-11 11:51:34 -04:00
beckerinj 3e5ffb8902 daily interval fix 2022-05-11 11:33:18 -04:00
beckerinj 9cd8897a24 daily interval style 2022-05-11 11:32:23 -04:00
mbecker20 1bacc53e75 daily interval on startup 2022-05-11 11:08:16 -04:00
beckerinj dfd0c57781 daily interval 2022-05-11 11:04:32 -04:00
mbecker20 64a4d002e0 stats view 2022-05-10 14:06:44 -04:00
beckerinj 86c154fb3f fix 2022-05-10 13:50:20 -04:00
beckerinj bf8f4fccdb move slack token to secrets 2022-05-10 13:49:26 -04:00
mbecker20 e43b60143b sys stats frontend 2022-05-10 13:42:57 -04:00
beckerinj 5d2b10fdb9 notify slack on startup 2022-05-10 13:26:28 -04:00
beckerinj 7fe05d7c8a slack notifier 2022-05-10 13:24:27 -04:00
beckerinj 1acf4d989e add node os utils 2022-05-10 10:24:04 -04:00
beckerinj e9f917cc12 add route to retrieve system stats 2022-05-10 10:18:32 -04:00
mbecker20 81d0d2ad42 cli periphery / core deploy pulls latest image every time 2022-05-08 20:26:37 -04:00
mbecker20 4d089c1e60 server stats 2022-05-08 01:44:04 -04:00
mbecker20 44a1a9e324 fix potentially unintialized onClone commands 2022-05-03 14:50:55 -04:00
mbecker20 c2c70366cc no access to deployments / updates outside of users scope 2022-05-02 22:58:31 -04:00
mbecker20 6752a539aa fix add server menu (make tabs move with left css prop 2022-04-27 03:42:38 -04:00
mbecker20 9140035a6e show username in account menu when isMobile 2022-04-23 04:17:08 -07:00
mbecker20 d9cdf0358c fix mobile topbar button theme 2022-04-23 04:10:31 -07:00
mbecker20 6d230a3efd collapsable updates in mobile 2022-04-23 04:06:50 -07:00
mbecker20 b1a4481688 fix tabs centering and widen sidebar elements 2022-04-23 01:16:16 -07:00
mbecker20 0bc3238393 differentiate textred / textgreen when dark 2022-04-22 19:36:09 -07:00
mbecker20 f1ec284bea update scroller 2022-04-22 13:56:48 -07:00
mbecker20 b3b53a4950 load more 2022-04-22 13:43:47 -07:00
mbecker20 73e6c0bd8e fix? 2022-04-22 13:40:51 -07:00
mbecker20 63c687c4ef fix users page dark theme 2022-04-22 13:26:09 -07:00
mbecker20 dd1fecdce1 hover menu dark 2022-04-22 13:20:44 -07:00
mbecker20 51cd8d07c1 cli 0.0.27 2022-04-22 13:14:52 -07:00
mbecker20 16515591b2 cli 0.2.26 2022-04-22 13:07:55 -07:00
mbecker20 9e58e5f198 fix center menu and update themeClass 2022-04-22 12:55:02 -07:00
mbecker20 733fae804d bring up grey brightness 2022-04-22 02:48:43 -07:00
mbecker20 d2654eb496 shift light theme greys a bit away from blue 2022-04-22 02:44:01 -07:00
mbecker20 6122b1b570 invert color of icons with filter 2022-04-22 02:35:35 -07:00
mbecker20 c36d878535 implement light / dark theme toggle 2022-04-22 02:23:09 -07:00
mbecker20 ae5a7023cb state for dark / light theme 2022-04-21 01:03:43 -07:00
mbecker20 59e81c0bec add commented out light theme 2022-04-20 22:23:44 -07:00
mbecker20 53df4b204b fix periphery dependen 2022-04-20 03:25:23 -07:00
mbecker20 6086f0db05 fix clone 2022-04-20 03:16:36 -07:00
mbecker20 09b5245972 build actions 2022-04-20 03:14:17 -07:00
mbecker20 1d8ac0a0c2 deployment reclone 2022-04-20 03:12:07 -07:00
mbecker20 58049472cb search for deployments also considers server name 2022-04-20 02:26:03 -07:00
mbecker20 1fa5eb6eb4 pull isCore from deployments 2022-04-19 10:17:20 -07:00
mbecker20 26cae6422c dont show actions on monitor core 2022-04-18 23:04:48 -07:00
mbecker20 b884a38781 update cli to take advantage of storing isCore on deployment 2022-04-18 23:00:20 -07:00
mbecker20 7f01ad1a28 improve log height when log doesnt fill whole height 2022-04-18 22:27:18 -07:00
mbecker20 1de3c89a9c fix deployment config tabs 2022-04-18 22:16:39 -07:00
mbecker20 56cba378e5 fix build given util-node dependency 2022-04-18 18:38:20 -07:00
mbecker20 cfba96fbc0 nice tab animation 2022-04-18 18:31:34 -07:00
mbecker20 e7b3d08ce4 remove ugly effect in useSelected 2022-04-18 05:59:06 -07:00
mbecker20 3adf31612a Not found and some random changes 2022-04-18 04:05:52 -07:00
mbecker20 d135f43727 enable util to be used by frontend 2022-04-18 02:58:20 -07:00
mbecker20 7b68301008 switch stderr and stdout in updates 2022-04-18 01:30:23 -07:00
mbecker20 81e3f0df28 fix to mergeCommandLogError 2022-04-18 00:27:50 -07:00
mbecker20 bf34a47d4f mid size 1200px 2022-04-16 11:29:03 -07:00
mbecker20 d3c665a930 more mobile improvements 2022-04-16 11:17:38 -07:00
mbecker20 859c163900 unneeded import 2022-04-15 23:43:15 -07:00
mbecker20 58cec42422 download log or error log specifically 2022-04-15 23:25:23 -07:00
mbecker20 ef2a112274 home moved to wrapping flex 2022-04-15 21:40:28 -07:00
mbecker20 45f95f252b loop around search 2022-04-15 21:19:48 -07:00
mbecker20 52b8129f19 unknown status 2022-04-15 20:53:13 -07:00
mbecker20 60d75ae0de simplify 2022-04-15 18:55:48 -07:00
mbecker20 970b8f1ed7 fix mobile updates 2022-04-15 05:20:37 -07:00
mbecker20 be6b7eed60 hover menu and home width 2022-04-15 05:11:28 -07:00
mbecker20 489128e52d mobile search 2022-04-15 04:57:57 -07:00
mbecker20 fe9c64eac6 correct connect-src 2022-04-15 03:33:33 -07:00
mbecker20 cf1950f31a connect-src security directive for websockets 2022-04-15 03:26:21 -07:00
mbecker20 9d7f0f8bd1 quick fix 2022-04-15 02:39:30 -07:00
mbecker20 ee3e6f5471 fix to search and enter when input not focussed 2022-04-15 02:35:44 -07:00
mbecker20 eb15987395 new search and status 2022-04-15 02:27:21 -07:00
mbecker20 fe215d49c0 only show delete when you have permission to delete 2022-04-14 20:50:24 -07:00
mbecker20 d31508142c useWindowKeyDown for global keyboard shortcuts 2022-04-14 13:40:55 -07:00
mbecker20 61cac54088 remove auto open of menu 2022-04-14 07:27:35 -07:00
mbecker20 55243f122d pull down log container size 2022-04-14 07:21:53 -07:00
mbecker20 b9a19f0261 fix log sizing and make topbar icons smaller 2022-04-14 07:15:11 -07:00
mbecker20 c926d4d13d cli v 0.0.25 2022-04-14 07:01:32 -07:00
mbecker20 491819b01b add pull latest to cli 2022-04-14 06:58:18 -07:00
mbecker20 3025809175 activate search with shift + s 2022-04-14 06:42:18 -07:00
mbecker20 d0c5cdf892 clean up search and add shift+m sidebar toggle 2022-04-14 06:32:17 -07:00
mbecker20 42fcd0fee0 do only show download log when user can update 2022-04-14 05:31:06 -07:00
mbecker20 cb5f88adb0 select log length 2022-04-14 05:24:29 -07:00
mbecker20 12926678c4 cli v 0.0.24 2022-04-13 23:15:09 -07:00
mbecker20 81bbcf10b9 configure host env cli 2022-04-13 23:14:13 -07:00
mbecker20 17a255a106 default all owners to empty array 2022-04-13 13:24:25 -07:00
mbecker20 38320a4f8b servers owners defaults to empty array 2022-04-13 13:22:35 -07:00
mbecker20 961f4d640c fix new input too wide 2022-04-13 05:52:18 -07:00
mbecker20 6eeed044ec initialize server action states 2022-04-13 05:46:30 -07:00
mbecker20 f801e0f0d1 connection close code unneeded 2022-04-13 05:20:46 -07:00
mbecker20 c33553808d fix to remove network from periphery 2022-04-13 05:09:36 -07:00
mbecker20 92dae9e7e0 remove monitor network from periphery install 2022-04-13 05:05:32 -07:00
mbecker20 f444920c69 fixed error with docker account image 2022-04-13 04:42:29 -07:00
mbecker20 80ca84c683 add health check route 2022-04-13 03:54:23 -07:00
mbecker20 5004753c09 add ws connect state 2022-04-13 03:43:27 -07:00
mbecker20 63cf7df2ad add docker account to db 2022-04-13 02:48:24 -07:00
mbecker20 67c1bebe59 update cli version 2022-04-13 00:26:10 -07:00
mbecker20 2c35d66b96 clean 2022-04-13 00:25:31 -07:00
mbecker20 47089161eb dynamic url for development and production 2022-04-13 00:17:18 -07:00
mbecker20 5454d1a909 paginated updates loading 2022-04-12 22:55:32 -07:00
mbecker20 1c1fa26db9 move start / stop into deploy actions 2022-04-12 05:23:44 -07:00
mbecker20 e11180a6ca add download log button 2022-04-12 04:59:23 -07:00
mbecker20 f820373488 navigation with search 2022-04-12 01:33:38 -07:00
mbecker20 97d7fcdc32 broadcast when container actions happend 2022-04-12 00:09:01 -07:00
mbecker20 c6f685ff23 copy listener url 2022-04-11 23:27:29 -07:00
mbecker20 6bdb0cb705 make frontend slightly responsive to dimensions 2022-04-11 03:51:20 -07:00
mbecker20 2cea99de96 add can edit indicator in the sidebar + username in topbar 2022-04-10 13:04:50 -07:00
mbecker20 596c7feeda dont allow breaking simultaneous actions using actionStates 2022-04-10 11:11:59 -07:00
mbecker20 fe644f4e94 load all deployments in one 2022-04-09 23:54:15 -07:00
mbecker20 753de978c0 add simple home screen 2022-04-09 15:12:34 -07:00
mbecker20 b7851f2a3c browser back working 2022-04-08 23:11:42 -07:00
mbecker20 6144901bf2 server permissions start 2022-04-08 18:33:29 -07:00
mbecker20 e0385cc47c canUserUpdate build and build owner config 2022-04-08 15:11:22 -07:00
mbecker20 43342fb9bf manage deployment owners 2022-04-08 13:07:37 -07:00
mbecker20 36a636129f remove owners whose account have been deleted 2022-04-08 01:59:29 -07:00
mbecker20 a0109c35de manage deployment owners / collaborators 2022-04-08 01:47:15 -07:00
mbecker20 cf8ce414ea userCanUpdate config 2022-04-07 21:00:23 -07:00
mbecker20 0e5c298199 useCollection filter 2022-04-07 05:20:11 -07:00
mbecker20 806afc7fa8 manage users 2022-04-07 04:59:43 -07:00
mbecker20 f4a57235ce seems to be working 2022-04-05 14:44:22 -07:00
mbecker20 bf4d759ae7 pull action 2022-04-05 06:20:59 -07:00
mbecker20 32b5e46959 fix the listener 2022-04-05 05:32:06 -07:00
mbecker20 ca8aa46287 turn on periphery log 2022-04-05 04:59:58 -07:00
mbecker20 29c663b4e2 deploy not working 2022-04-05 04:48:29 -07:00
mbecker20 e70ca668f5 fix query 2022-04-05 04:00:54 -07:00
mbecker20 69b8b2a810 join to make builds dir 2022-04-05 03:01:37 -07:00
mbecker20 ebde89862f fix 2022-04-05 01:21:27 -07:00
mbecker20 8c39a0e86c core pull before deploy 2022-04-05 01:05:46 -07:00
mbecker20 0e85398ad1 fix repo root 2022-04-05 00:57:33 -07:00
mbecker20 84484b40ac log steps of deployment clone 2022-04-05 00:44:48 -07:00
mbecker20 c572087e9c ActionStateProvider 2022-04-05 00:37:26 -07:00
mbecker20 1cd5f6cee3 sidebar tab localstorage 2022-04-04 18:10:43 -07:00
mbecker20 b556d194c8 color the statuses and only show log when created 2022-04-04 13:55:32 -07:00
mbecker20 8da46462ae make selected tab grey 2022-04-04 05:05:25 -07:00
mbecker20 b6ff569c61 fix to merge command log error 2022-04-04 04:58:42 -07:00
mbecker20 75d31c1779 grey screenshots 2022-04-04 04:56:22 -07:00
mbecker20 cec2231139 grey out 2022-04-04 04:30:43 -07:00
mbecker20 607a550941 sidebar scrolls 2022-04-04 02:33:30 -07:00
mbecker20 be200b39f9 screenshots 2022-04-04 02:19:17 -07:00
mbecker20 2aa8724829 mobile pic 2022-04-04 02:12:55 -07:00
mbecker20 f43680e8d5 readme 2022-04-04 02:12:16 -07:00
mbecker20 6cbd8be1ac new screenshots 2022-04-04 02:11:13 -07:00
mbecker20 9d3fe1cbea darker blue 2022-04-04 01:50:55 -07:00
mbecker20 2f0822c6f6 consolidate theme 2022-04-03 21:46:30 -07:00
mbecker20 d3c7e74562 add some color variables 2022-04-03 03:38:55 -07:00
mbecker20 ff90854be2 move to sass 2022-04-03 03:29:40 -07:00
mbecker20 c17967e4a9 make validations file 2022-04-03 02:31:56 -07:00
mbecker20 e5fc4117ec config justify 2022-04-02 23:36:05 -07:00
mbecker20 2ee204d4c8 fix remote clone 2022-04-02 15:53:31 -07:00
mbecker20 43e18f93be config deployment mount repo 2022-04-02 15:29:10 -07:00
mbecker20 135674600b New 2022-04-02 14:18:51 -07:00
mbecker20 8a1b732bde forgot to call done() 2022-04-02 13:38:27 -07:00
mbecker20 8e51b91a79 hide actions without appropriate permissions + deplopyment git 2022-04-02 12:59:50 -07:00
mbecker20 d7eb162799 shore up github listener 2022-04-02 01:54:45 -07:00
mbecker20 5588553a37 login page and "no builds" 2022-04-01 22:08:00 -07:00
mbecker20 41d5e48c17 fix command for log implementation 2022-04-01 00:02:58 -07:00
mbecker20 bfb69b0207 Merge branch 'main' of https://github.com/mbecker20/monitor 2022-04-01 00:01:48 -07:00
mbecker20 b1ad9f95c0 new create build / deployment 2022-04-01 00:01:46 -07:00
mbecker20 a899a87305 tiny 2022-03-31 16:48:43 -07:00
mbecker20 ba3ecc1143 fix scrolling 2022-03-31 14:18:54 -07:00
mbecker20 d2e2e405e3 sidebar tabs 2022-03-31 14:11:29 -07:00
mbecker20 a4fe524784 refactor reused css between deployments / builds / servers 2022-03-31 07:22:56 -07:00
mbecker20 46af953df9 small stuff 2022-03-31 06:50:00 -07:00
mbecker20 28622390e9 pretty stringify logs 2022-03-31 06:26:45 -07:00
mbecker20 efdce511bb push to docker hub working 2022-03-31 06:19:02 -07:00
mbecker20 0000d2a938 update 2022-03-31 06:14:52 -07:00
mbecker20 57700fc5c2 fix clone error 2022-03-31 06:02:29 -07:00
mbecker20 5e35d989b3 refresh secrets 2022-03-31 05:41:54 -07:00
mbecker20 b637ba1860 config sysroot 2022-03-31 03:50:07 -07:00
mbecker20 297b8735a5 implement sysroot mount in cli 2022-03-31 03:39:37 -07:00
mbecker20 aa4f160946 config width 2022-03-31 03:20:44 -07:00
mbecker20 0219aef6d5 add 100vw 100vh background to menu for close on click outside 2022-03-31 03:13:59 -07:00
mbecker20 9debdc422f build, deploy, add server working 2022-03-31 02:45:24 -07:00
mbecker20 9aad9ee163 fix reclone and add some action state 2022-03-31 02:15:46 -07:00
mbecker20 9c5547fd36 fix to local deployment 2022-03-31 01:25:50 -07:00
mbecker20 b810e38bb0 only push if docker account exits 2022-03-31 01:01:29 -07:00
mbecker20 c0ffcacc4e working with accounts 2022-03-31 00:53:47 -07:00
mbecker20 4fa1393a96 make changes for github / docker accounts 2022-03-30 23:19:22 -07:00
mbecker20 f54f194b6e remove registry from this stack. can be managed externally 2022-03-30 18:26:14 -07:00
mbecker20 9667085a7d fix deploy actions 2022-03-30 03:23:53 -07:00
mbecker20 aa920f742a build cloning 2022-03-30 03:15:41 -07:00
mbecker20 870e047e1e fix 2022-03-30 02:09:50 -07:00
mbecker20 bbc7036bfe fix 2022-03-30 01:37:14 -07:00
mbecker20 3f1e7e6e62 deploy 2022-03-30 01:24:01 -07:00
mbecker20 7141530c86 build responsive 2022-03-29 23:57:41 -07:00
mbecker20 db09836981 fix build changelog 2022-03-29 23:49:34 -07:00
mbecker20 eface85e1f saving 2022-03-29 23:48:08 -07:00
mbecker20 78814198d2 fix here as well 2022-03-29 23:09:11 -07:00
mbecker20 f6e15ea495 fix to onclone 2022-03-29 23:07:31 -07:00
mbecker20 1895a0edd9 configure builds 2022-03-29 22:16:11 -07:00
mbecker20 3e3aa21069 deployment action state loaders 2022-03-29 19:06:15 -07:00
mbecker20 9487deed99 loading component 2022-03-29 18:14:39 -07:00
mbecker20 d611a45f60 implement clone onClone command 2022-03-29 09:06:21 -07:00
mbecker20 9765cb2b74 implement sparse clone 2022-03-29 08:43:02 -07:00
mbecker20 4b83e9343c archetecture of build service 2022-03-29 08:00:17 -07:00
mbecker20 09c2551a71 fix to periphery deploy 2022-03-29 05:06:44 -07:00
mbecker20 a15bea9569 remove useSystemRoot from volumes 2022-03-29 04:48:43 -07:00
mbecker20 7dfaccc1f1 rename not created to not deployed, server enable 2022-03-28 16:53:09 -07:00
mbecker20 a13a3f7f17 change periphery routes to not prefix http:// 2022-03-28 16:28:15 -07:00
mbecker20 ef44f226ff network create, delete, prune working 2022-03-28 16:23:39 -07:00
mbecker20 459739f209 add network create and delete util 2022-03-28 15:47:35 -07:00
mbecker20 49335230bf server page prog 2022-03-28 05:02:54 -07:00
mbecker20 64f9405670 start on server page 2022-03-28 04:24:33 -07:00
mbecker20 4d7cb1444c connect to periphery working 2022-03-28 01:27:29 -07:00
mbecker20 a5e1e6867e fix host for periphery 2022-03-28 01:17:40 -07:00
mbecker20 06947d8612 add server 2022-03-28 00:44:16 -07:00
mbecker20andGitHub 4add8edaa8 Merge pull request #2 from karamvirsingh98/main
fix docker build arm
2022-03-27 21:12:38 -07:00
Karamvir Singh 925f07b6e6 fix docker build arm 2022-03-27 20:55:32 -07:00
mbecker20 0a917c1471 log reload 2022-03-27 20:02:30 -07:00
mbecker20 cb32e3c2bb add important css 2022-03-27 17:55:51 -07:00
mbecker20 ba7da33300 delete unneeded css 2022-03-27 17:55:30 -07:00
mbecker20 c3550c31e9 log working 2022-03-27 05:41:07 -07:00
mbecker20 24e58d36de updates 2022-03-27 04:05:02 -07:00
mbecker20 fbd895e9c2 fix deployment delete update log 2022-03-27 00:26:43 -07:00
mbecker20 bafb808780 fix command and log icon 2022-03-26 23:26:26 -07:00
mbecker20 df13897497 fix core logic of whether container action on core or periphery server 2022-03-26 19:41:00 -07:00
mbecker20 84b1b4e57b updates 2022-03-26 06:37:18 -07:00
mbecker20 68cb92a7dc move update to its own component 2022-03-26 02:44:20 -07:00
mbecker20 0d3b5ce005 fix 2022-03-26 01:20:59 -07:00
mbecker20 b4c712d7d0 can create and delete 2022-03-26 00:54:51 -07:00
mbecker20 7f1421604b delete deployment actually deletes 2022-03-26 00:39:06 -07:00
mbecker20 4efd443c04 creating working 2022-03-26 00:02:29 -07:00
mbecker20 2d49eb79c9 creating is broken 2022-03-25 21:38:08 -07:00
mbecker20 9d25af0a68 fix to backend status 2022-03-25 21:29:43 -07:00
mbecker20 6fd0143495 image 2022-03-25 19:11:11 -07:00
mbecker20 2f78f8f3e2 config actually configs 2022-03-25 19:04:21 -07:00
mbecker20 c23e195127 add minus to conversions and add shadows 2022-03-25 03:58:55 -07:00
mbecker20 962a1c327e dont see why network needs id 2022-03-25 03:50:54 -07:00
mbecker20 c6acbb54ff add routes to get networks on server 2022-03-25 03:41:32 -07:00
mbecker20 2245f3f501 add list network functionality 2022-03-25 03:16:58 -07:00
mbecker20 1942c9c6d9 config conversions 2022-03-25 02:29:05 -07:00
mbecker20 764e230b6e base of more config 2022-03-24 22:40:31 -07:00
mbecker20 65d647e2fd fix menu bottom center 2022-03-24 21:45:12 -07:00
mbecker20 3a04d23116 something 2022-03-24 21:31:24 -07:00
mbecker20andGitHub bdc645785b Merge pull request #1 from karamvirsingh98/main
take it and go
2022-03-24 21:28:41 -07:00
Karamvir Singh 35c110817d it format now 2022-03-24 21:26:52 -07:00
Karamvir Singh 1b6b6fddfd take it and go 2022-03-24 21:16:57 -07:00
mbecker20 f227506f45 width of screenshot 2022-03-24 12:23:11 -07:00
mbecker20andGitHub 739003a7f3 Update readme.md 2022-03-24 12:21:22 -07:00
mbecker20 e1a60881bc add cropped mobile 2022-03-24 12:20:32 -07:00
mbecker20 6210ab20fc remove mobile 2022-03-24 12:20:11 -07:00
mbecker20 c45670f908 crop 2022-03-24 12:19:07 -07:00
mbecker20 81bb06bb5b Merge branch 'main' of https://github.com/mbecker20/monitor into main 2022-03-24 12:17:14 -07:00
mbecker20 01a87c7f89 mobile jpeg 2022-03-24 12:17:12 -07:00
mbecker20andGitHub beab48287b Update readme.md 2022-03-24 10:42:51 -07:00
mbecker20 fa4f24f5ed new ss2 2022-03-24 10:42:02 -07:00
mbecker20 eb3c173f89 reset 2022-03-24 10:41:18 -07:00
mbecker20 3c1f245995 Merge branch 'main' of https://github.com/mbecker20/monitor into main 2022-03-24 10:40:03 -07:00
mbecker20 ec079b732e screenshot2 2022-03-24 10:40:02 -07:00
mbecker20andGitHub 09ad6daa67 Update readme.md 2022-03-24 10:38:42 -07:00
mbecker20andGitHub ce7322010f Update readme.md 2022-03-24 10:36:21 -07:00
mbecker20 054e896243 screenshot2 2022-03-24 10:34:03 -07:00
mbecker20 163b83bbc1 screenshots 2022-03-24 10:32:01 -07:00
mbecker20 e871262da8 config image start and start on create menus 2022-03-24 00:16:22 -07:00
mbecker20 73b408d7a3 mogh favicon 2022-03-23 23:42:43 -07:00
mbecker20 02cd1379a0 deployment tabs and updates 2022-03-23 22:06:29 -07:00
mbecker20 ca9678b346 Merge branch 'main' of https://github.com/mbecker20/monitor into main 2022-03-23 18:59:21 -07:00
mbecker20 8b049bd802 modify licence to GPL v3.0 2022-03-23 18:59:19 -07:00
mbecker20andGitHub f6cfc0dda6 Create LICENSE 2022-03-23 18:57:33 -07:00
mbecker20 8fb821b2f5 owners 2022-03-23 18:26:40 -07:00
mbecker20 2f4ad66206 cli will create initial update for start of monitor 2022-03-23 17:34:44 -07:00
mbecker20 523201c993 topbar and deployment 2022-03-23 16:26:41 -07:00
mbecker20 18e8131102 serve the frontend correctly 2022-03-23 03:32:51 -07:00
mbecker20 7c913276e1 login 2022-03-23 02:26:54 -07:00
mbecker20 8ae5464771 font 2022-03-23 02:25:08 -07:00
mbecker20 d059d7fb30 selected state deployment and server / deployment status 2022-03-23 02:20:02 -07:00
mbecker20 e54b7633bc mount the docker sock 2022-03-23 01:26:39 -07:00
mbecker20 5d9c6aabf2 asdf 2022-03-22 23:22:42 -07:00
mbecker20 6351c1362c interesting 2022-03-22 22:52:55 -07:00
mbecker20 23ef4bbc32 frontend sidebar 2022-03-22 22:16:59 -07:00
mbecker20 466586a580 basic frontend layout 2022-03-22 21:35:58 -07:00
mbecker20 7ca5806703 add structure for handling socket messages 2022-03-21 22:11:02 -07:00
mbecker20 b81b9aa58b frontend structure 2022-03-21 21:11:07 -07:00
mbecker20 858ce7263a add some util stuff 2022-03-21 13:52:09 -07:00
mbecker20 bd8f022546 fix restart default 2022-03-21 11:20:24 -07:00
mbecker20 e6f7af81d7 improve description of restart 2022-03-21 11:01:27 -07:00
mbecker20 c7357b7ddf lowercase App -> app 2022-03-21 10:55:33 -07:00
mbecker20 0a4dd709eb allow restart with flags specifying name and mongo url 2022-03-21 03:19:01 -07:00
mbecker20 8fe2ab2aab restart default flag 2022-03-21 03:07:23 -07:00
mbecker20 f2f626f367 restat in cli and fix ws 2022-03-21 02:46:24 -07:00
mbecker20 875d1e6976 looks like ws connect login stream working 2022-03-20 23:09:54 -07:00
mbecker20 cd6263a6c5 add user route to core 2022-03-20 22:24:41 -07:00
mbecker20 8832993386 update version 2022-03-20 22:11:18 -07:00
mbecker20 35da67b981 get deploy working using monitor network 2022-03-20 22:10:27 -07:00
mbecker20 f984520746 the cli sets up a network 2022-03-20 21:59:51 -07:00
mbecker20 b4f5c71589 default address 2022-03-20 21:19:14 -07:00
mbecker20 f469bbe3bc copy frontend into core for docker bundle 2022-03-20 21:04:42 -07:00
mbecker20 6a53ecc8b5 next version 2022-03-20 20:33:57 -07:00
mbecker20 a92d33de84 fix to esc behavior 2022-03-20 20:33:01 -07:00
mbecker20 1d96430c6f fix 2022-03-20 20:25:48 -07:00
mbecker20 33347d963c fixes for 0.0.17 2022-03-20 20:24:24 -07:00
mbecker20 8c376b615a update 2022-03-20 13:49:35 -07:00
mbecker20 d4f63cab36 remove spinner from setup (causes flashes) 2022-03-20 13:48:57 -07:00
mbecker20 74402c7048 version 2022-03-20 13:42:24 -07:00
mbecker20 9c2be628c8 make reg and mongo volume mounts not used default 2022-03-20 13:41:38 -07:00
mbecker20 6f55207a76 update 2022-03-20 13:39:48 -07:00
mbecker20 cbb3be2532 remove - 2022-03-20 13:39:04 -07:00
mbecker20 0d35edb20b make host network yes default 2022-03-20 13:38:07 -07:00
mbecker20 e4c34b92fb fix total in setup and update version 2022-03-20 13:36:36 -07:00
mbecker20 34cbdf6129 0.0.13 2022-03-20 13:31:49 -07:00
mbecker20 9851269066 fix to spinner 2022-03-20 13:29:54 -07:00
mbecker20 34bd2eff19 version 2022-03-20 13:10:25 -07:00
mbecker20 833a7bf5c8 remove docker install support, linking to install docs instead 2022-03-20 13:08:18 -07:00
mbecker20 00dd601461 show logs by switching to installing stage 2022-03-20 12:42:01 -07:00
mbecker20 715a7ec3cf version 2022-03-20 11:26:30 -07:00
mbecker20 34014875e8 move docker install pushing commands to before early returns 2022-03-20 11:25:41 -07:00
mbecker20 bcf2aada0b just use node 10 it doesnt work on older versions 2022-03-20 11:06:41 -07:00
mbecker20 b26210b476 target node10 2022-03-20 11:05:08 -07:00
mbecker20 6e402aca0f update cli version 2022-03-20 10:49:09 -07:00
mbecker20 2985b4ce3f setup 2022-03-20 10:45:40 -07:00
mbecker20 5e802fb9d9 push 2022-03-20 10:27:44 -07:00
mbecker20 6d7c8a6141 title 2022-03-20 10:13:49 -07:00
mbecker20 e6f047ee27 reverse order of these 2022-03-20 10:09:33 -07:00
mbecker20 c92f4bed4e begin on frontend state 2022-03-20 05:49:18 -07:00
mbecker20 469ff2fbd0 version 2022-03-20 04:34:56 -07:00
mbecker20 3973e8d75a handle error in setup 2022-03-20 04:29:17 -07:00
mbecker20 c24f0a728c add server id to mongo deployment 2022-03-20 04:24:00 -07:00
mbecker20 5bc5727dfb setup apparently wokring 2022-03-20 04:21:36 -07:00
mbecker20 75777de32a add setup scripts 2022-03-20 03:48:05 -07:00
mbecker20 0bfa6de526 ssr option vite 2022-03-19 18:29:41 -07:00
mbecker20 d8a1e61070 remove legacy cli from main 2022-03-19 18:28:16 -07:00
mbecker20 db9226aaef add mongoose util 2022-03-19 18:26:49 -07:00
mbecker20 1a0bfbbcf9 add deploy funcs 2022-03-19 18:26:06 -07:00
mbecker20 c2941327a5 add periphery config 2022-03-19 17:47:26 -07:00
mbecker20 befd249663 monitor core config 2022-03-19 17:39:59 -07:00
mbecker20 1be679745a confirm page show config 2022-03-19 16:38:08 -07:00
mbecker20 3d60bb16ec setup the registry config 2022-03-19 15:40:15 -07:00
mbecker20 048905997a deployment config 2022-03-19 14:59:36 -07:00
mbecker20 9c09d10352 help flag 2022-03-19 12:42:22 -07:00
mbecker20 72c624f691 setup jotai and restructure a bit 2022-03-19 03:15:19 -07:00
mbecker20 b855155043 support flags 2022-03-19 02:33:18 -07:00
mbecker20 d64da60d4e begin cli v2 2022-03-18 23:02:51 -07:00
mbecker20 2db166ddb3 rename transform to post-build for clarity 2022-03-18 18:10:49 -07:00
mbecker20 0cbb90760b add initial docs 2022-03-18 08:59:12 -07:00
mbecker20 7130da485b fix to publish command 2022-03-18 05:31:06 -07:00
mbecker20 adf31cc75e publish the cli 2022-03-18 05:12:13 -07:00
mbecker20 3d8f783068 add vite build into one file 2022-03-18 03:47:09 -07:00
mbecker20 a3044c4991 start the registry 2022-03-18 03:13:52 -07:00
mbecker20 d8ae664ece description of mongo mount 2022-03-18 02:45:06 -07:00
mbecker20 e0b9869733 detect whether docker installed 2022-03-18 02:31:15 -07:00
mbecker20 3bd9cfcdda docker install with cli 2022-03-18 01:56:22 -07:00
mbecker20 b716fdae4c setup mongo 2022-03-17 19:00:08 -07:00
mbecker20 678a09a524 mongo install working 2022-03-17 17:20:53 -07:00
mbecker20 65dd347496 fixes 2022-03-17 13:42:08 -07:00
mbecker20 c355abbc1d add monitor cli 2022-03-17 13:09:49 -07:00
mbecker20 ab1b9d2d5a core running 2022-03-17 04:01:10 -07:00
mbecker20 99a22614c0 dockerizer periphery 2022-03-17 02:45:00 -07:00
mbecker20 2c043ff80b dont need this 2022-03-17 02:37:06 -07:00
mbecker20 ac3ce30e5d figure out docker build with local modules 2022-03-17 02:36:52 -07:00
mbecker20 a737027783 added routes to get data 2022-03-17 00:19:02 -07:00
mbecker20 66adf8cb87 move actions to util 2022-03-16 23:18:21 -07:00
mbecker20 049689c1d2 fix deployment command for monitor image / latest 2022-03-16 23:07:47 -07:00
mbecker20 06470dc776 the messages / actions are mostly done 2022-03-16 22:51:51 -07:00
mbecker20 c5e667051c deploy deployment 2022-03-16 14:59:28 -07:00
mbecker20 4250e93b60 improve queries to just take server as input 2022-03-16 14:40:21 -07:00
mbecker20 6f1479e9ae deployment and server message progress 2022-03-16 13:41:45 -07:00
mbecker20 ae6736cae5 periphery functions and core-side queries 2022-03-16 00:52:11 -07:00
mbecker20 505f57fcab prog on periphery 2022-03-15 18:45:33 -07:00
mbecker20 aebe6c5c2b add repoMount to docker run 2022-03-15 13:52:31 -07:00
mbecker20 0c1c925e18 add start commands 2022-03-15 13:35:07 -07:00
mbecker20 3e7734522e move permissions check to top level early return 2022-03-15 13:17:50 -07:00
mbecker20 a36d7ba912 start on deployments 2022-03-15 04:33:35 -07:00
mbecker20 82371db1c3 refactor build messages into seperate files 2022-03-15 04:00:15 -07:00
mbecker20 0da2bf732f add action states and build messages 2022-03-15 03:18:32 -07:00
mbecker20 2e623505d9 github listener 2022-03-14 13:06:51 -07:00
mbecker20 3b2a8e7683 add helmet 2022-03-14 12:37:21 -07:00
mbecker20 ba791bf381 pass the client socket into message handler 2022-03-14 12:25:36 -07:00
mbecker20 439d4f7c3a start setting up action messages 2022-03-14 11:32:10 -07:00
mbecker20 b997d3153c updates helpers 2022-03-14 11:13:31 -07:00
mbecker20 137be095c3 change structure for plugins / util 2022-03-14 10:00:13 -07:00
mbecker20 1a70a39365 some helpers 2022-03-14 09:55:05 -07:00
mbecker20 282cfcc7b0 add some db helpers 2022-03-14 01:19:59 -07:00
mbecker20 12ca36f108 create servers, docker commands 2022-03-14 01:07:17 -07:00
mbecker20 1bd5e8675a add db schema 2022-03-14 00:14:37 -07:00
mbecker20 37c2f6a203 action types 2022-03-13 22:37:22 -07:00
mbecker20 0a80f83cc8 add the monitor types 2022-03-13 22:30:14 -07:00
mbecker20 eba85c3c11 add permissions to users 2022-03-13 22:04:34 -07:00
mbecker20 9442dacacc setup websockets 2022-03-13 21:58:02 -07:00
mbecker20 3095ae9983 setup db and auth in new monitor core 2022-03-13 21:45:26 -07:00
mbecker20 8352f460b4 more setup 2022-03-13 13:38:28 -07:00
mbecker20 dd935ce147 add more deps 2022-03-13 01:50:52 -08:00
mbecker20 31d79fb67b some changes / fixes 2022-03-13 01:26:26 -08:00
mbecker20 b73149516a add readme (still out of date slightly) 2022-03-13 01:19:44 -08:00
mbecker20 449dd9a868 add folder structure of monitorv2 2022-03-13 01:18:24 -08:00
977 changed files with 221393 additions and 1506 deletions
+5
View File
@@ -0,0 +1,5 @@
[alias]
xtask = "run --package xtask --"
[build]
rustflags = ["-Wunused-crate-dependencies"]
+39
View File
@@ -0,0 +1,39 @@
services:
dev:
image: mcr.microsoft.com/devcontainers/rust:1-bookworm
volumes:
# Mount the root folder that contains .git
- ../:/workspace:cached
- /var/run/docker.sock:/var/run/docker.sock
- /proc:/proc
- repos:/etc/komodo/repos
- stacks:/etc/komodo/stacks
command: sleep infinity
ports:
- "9120:9120"
environment:
KOMODO_HOST: http://localhost:9120
KOMODO_FIRST_SERVER: http://localhost:8120
KOMODO_DATABASE_ADDRESS: db
KOMODO_ENABLE_NEW_USERS: true
KOMODO_LOCAL_AUTH: true
KOMODO_JWT_SECRET: a_random_secret
VITE_KOMODO_HOST: http://localhost:9120
KOMODO_CORS_ALLOWED_ORIGINS: http://localhost:5173
KOMODO_CORS_ALLOW_CREDENTIALS: true
PERIPHERY_SSL_ENABLED: false
KOMODO_SESSION_ALLOW_CROSS_SITE: true
links:
- db
# ...
db:
extends:
file: ../dev.compose.yaml
service: ferretdb
volumes:
data:
repo-cache:
repos:
stacks:
+52
View File
@@ -0,0 +1,52 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/rust
{
"name": "Komodo",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
//"image": "mcr.microsoft.com/devcontainers/rust:1-1-bullseye",
"dockerComposeFile": ["dev.compose.yaml"],
"workspaceFolder": "/workspace",
"service": "dev",
// Features to add to the dev container. More info: https://containers.dev/features.
"features": {
"ghcr.io/devcontainers/features/node:1": {
"version": "22.12.0"
},
"ghcr.io/devcontainers-community/features/deno:1": {
}
},
// Use 'mounts' to make the cargo cache persistent in a Docker Volume.
"mounts": [
{
"source": "devcontainer-cargo-cache-${devcontainerId}",
"target": "/usr/local/cargo",
"type": "volume"
}
],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [
5173,
9120
],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "./.devcontainer/postCreate.sh",
"runServices": [
"db"
],
// Configure tool-specific properties.
// "customizations": {},
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
"remoteEnv": {
// Avoid out of memory error when running `yarn build`
"NODE_OPTIONS": "--max-old-space-size=4096"
}
}
+9
View File
@@ -0,0 +1,9 @@
#!/bin/sh
cargo install typeshare-cli
sudo mkdir -p /etc/komodo/keys
sudo chown -R $(whoami) /etc/komodo
sudo mkdir -p /config/keys
sudo chown -R $(whoami) /config
+2
View File
@@ -0,0 +1,2 @@
# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository
open_collective: komodo
+56
View File
@@ -0,0 +1,56 @@
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
jobs:
build:
name: Build & Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
# - name: Cache cargo registry
# uses: actions/cache@v4
# with:
# path: |
# ~/.cargo/registry
# ~/.cargo/git
# target
# key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
# restore-keys: |
# ${{ runner.os }}-cargo-
- name: Build
run: cargo build --verbose
- name: Run tests
run: cargo test --verbose
fmt:
name: Format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
components: rustfmt
- name: Check formatting
run: cargo fmt --all -- --check
+9
View File
@@ -0,0 +1,9 @@
target
node_modules
dist
deno.lock
.env
.env.development
.DS_Store
.idea
.dev
+1
View File
@@ -0,0 +1 @@
.dev
+8
View File
@@ -0,0 +1,8 @@
{
"recommendations": [
"rust-lang.rust-analyzer",
"tamasfe.even-better-toml",
"vadimcn.vscode-lldb",
"denoland.vscode-deno"
]
}
+25
View File
@@ -0,0 +1,25 @@
{
"resolve": {
"scope": "rust",
"prefix": "resolve",
"body": [
"impl Resolve<${0}> for ${1} {",
"\tasync fn resolve(self, _: &${0}) -> Result<Self::Response, Self::Error> {",
"\t\ttodo!()",
"\t}",
"}"
]
},
"static": {
"scope": "rust",
"prefix": "static",
"body": [
"fn ${1}() -> &'static ${2} {",
"\tstatic ${0}: OnceLock<${2}> = OnceLock::new();",
"\t${0}.get_or_init(|| {",
"\t\ttodo!()",
"\t})",
"}"
]
}
}
+179
View File
@@ -0,0 +1,179 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Run Core",
"command": "cargo",
"args": [
"run",
"-p",
"komodo_core",
"--release"
],
"options": {
"cwd": "${workspaceFolder}",
"env": {
"KOMODO_CONFIG_PATH": "test.core.config.toml"
}
},
"problemMatcher": [
"$rustc"
]
},
{
"label": "Build Core",
"command": "cargo",
"args": [
"build",
"-p",
"komodo_core",
"--release"
],
"options": {
"cwd": "${workspaceFolder}",
"env": {
"KOMODO_CONFIG_PATH": "test.core.config.toml"
}
},
"problemMatcher": [
"$rustc"
]
},
{
"label": "Run Periphery",
"command": "cargo",
"args": [
"run",
"-p",
"komodo_periphery",
"--release"
],
"options": {
"cwd": "${workspaceFolder}",
"env": {
"KOMODO_CONFIG_PATH": "test.periphery.config.toml"
}
},
"problemMatcher": [
"$rustc"
]
},
{
"label": "Build Periphery",
"command": "cargo",
"args": [
"build",
"-p",
"komodo_periphery",
"--release"
],
"options": {
"cwd": "${workspaceFolder}",
"env": {
"KOMODO_CONFIG_PATH": "test.periphery.config.toml"
}
},
"problemMatcher": [
"$rustc"
]
},
{
"label": "Run Backend",
"dependsOn": [
"Run Core",
"Run Periphery"
],
"problemMatcher": [
"$rustc"
]
},
{
"label": "Build TS Client Types",
"type": "process",
"command": "node",
"args": [
"./client/core/ts/generate_types.mjs"
],
"problemMatcher": []
},
{
"label": "Init TS Client",
"type": "shell",
"command": "yarn && yarn build && yarn link",
"options": {
"cwd": "${workspaceFolder}/client/core/ts",
},
"problemMatcher": []
},
{
"label": "Init UI Client",
"type": "shell",
"command": "yarn link komodo_client && yarn install",
"options": {
"cwd": "${workspaceFolder}/ui",
},
"problemMatcher": []
},
{
"label": "Init UI",
"dependsOn": [
"Build TS Client Types",
"Init TS Client",
"Init UI Client"
],
"dependsOrder": "sequence",
"problemMatcher": []
},
{
"label": "Build UI",
"type": "shell",
"command": "yarn build",
"options": {
"cwd": "${workspaceFolder}/ui",
},
"problemMatcher": []
},
{
"label": "Prepare UI For Run",
"type": "shell",
"command": "cp -r ./client/core/ts/dist/. ui/public/client/.",
"options": {
"cwd": "${workspaceFolder}",
},
"dependsOn": [
"Build TS Client Types",
"Build UI"
],
"dependsOrder": "sequence",
"problemMatcher": []
},
{
"label": "Run UI",
"type": "shell",
"command": "yarn dev",
"options": {
"cwd": "${workspaceFolder}/ui",
},
"dependsOn": ["Prepare UI For Run"],
"problemMatcher": []
},
{
"label": "Init",
"dependsOn": [
"Build Backend",
"Init UI"
],
"dependsOrder": "sequence",
"problemMatcher": []
},
{
"label": "Run Komodo",
"dependsOn": [
"Run Core",
"Run Periphery",
"Run UI"
],
"problemMatcher": []
},
]
}
-16
View File
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
komo.do
Generated
+8201
View File
File diff suppressed because it is too large Load Diff
+142
View File
@@ -0,0 +1,142 @@
[workspace]
resolver = "2"
members = [
"bin/*",
"lib/*",
"xtask",
"client/core/rs",
"client/periphery/rs",
]
[workspace.package]
version = "2.3.1"
edition = "2024"
license = "GPL-3.0-or-later"
repository = "https://github.com/moghtech/komodo"
homepage = "https://komo.do"
[workspace.dependencies]
# LOCAL
komodo_client = { path = "client/core/rs" }
periphery_client = { path = "client/periphery/rs" }
environment = { path = "lib/environment" }
interpolate = { path = "lib/interpolate" }
formatting = { path = "lib/formatting" }
transport = { path = "lib/transport" }
database = { path = "lib/database" }
encoding = { path = "lib/encoding" }
command = { path = "lib/command" }
git = { path = "lib/git" }
# MOGH
slack = { version = "2.0.0", package = "slack_client_rs", default-features = false, features = ["rustls"] }
mogh_error = { version = "1.0.4", default-features = false }
derive_default_builder = "0.1.8"
async_timing_util = "1.1.0"
mogh_auth_client = "1.7.0"
mogh_auth_server = "1.7.0"
mogh_secret_file = "1.0.1"
mogh_validations = "1.0.1"
mogh_rate_limit = "1.0.1"
partial_derive2 = "0.5.0"
mongo_indexed = "2.1.0"
mogh_resolver = "1.0.0"
mogh_config = "1.1.0"
mogh_logger = "1.3.4"
mogh_server = "1.5.0"
toml_pretty = "2.0.0"
mogh_cache = "1.1.2"
mogh_pki = "1.1.3"
mungos = "3.7.0"
svi = "1.2.0"
# ASYNC
reqwest = { version = "0.13.4", default-features = false, features = ["json", "stream", "form", "query", "rustls"] }
tokio = { version = "1.53.1", features = ["full"] }
tokio-util = { version = "0.7.19", features = ["io", "codec"] }
tokio-stream = { version = "0.1.19", features = ["sync"] }
pin-project-lite = "0.2.17"
futures-util = "0.3.33"
arc-swap = "1.9.2"
# SERVER
tokio-tungstenite = { version = "0.30.0", features = ["rustls-tls-native-roots"] }
axum = { version = "0.8.9", features = ["ws", "json", "macros"] }
axum-extra = { version = "0.12.6", features = ["typed-header"] }
# OPENAPI
utoipa-scalar = { version = "0.3.0", features = ["axum"] }
utoipa = "5.5.0"
# SER/DE
ipnetwork = { version = "0.21.1", features = ["serde"] }
indexmap = { version = "2.14.0", features = ["serde"] }
serde = { version = "1.0.229", features = ["derive"] }
strum = { version = "0.28.0", features = ["derive"] }
bson = { version = "2.15.0" } # must keep in sync with mongodb version
toml = "1.1.3"
serde_yaml_ng = "0.10.0"
serde_json = "1.0.151"
serde_qs = "1.1.2"
url = "2.5.8"
# ERROR
anyhow = "1.0.104"
thiserror = "2.0.19"
# SYSTEM
libc = "0.2.189"
# LOGGING
tracing = "0.1.44"
# CONFIG
clap = { version = "4.6.4", features = ["derive"] }
dotenvy = "0.15.7"
envy = "0.4.2"
# CRYPTO / AUTH
uuid = { version = "1.24.0", features = ["v4", "fast-rng", "serde"] }
rustls = { version = "0.23.42", features = ["aws-lc-rs"] }
data-encoding = "2.11.0"
urlencoding = "2.1.3"
bcrypt = "0.19.2"
hmac = "0.13.0"
sha1 = "0.11.0"
sha2 = "0.11.0"
rand = "0.10.2"
hex = "0.4.3"
# SYSTEM
hickory-resolver = "0.26.1"
portable-pty = "0.9.0"
shell-escape = "0.1.5"
crossterm = "0.29.0"
bollard = "0.21.0"
sysinfo = "0.39.6"
shlex = "2.0.1"
# CLOUD
aws-config = "1.10.0"
aws-sdk-ec2 = "1.241.0"
aws-credential-types = "1.3.0"
## CRON
english-to-cron = "0.1.7"
chrono-tz = "0.10.4"
chrono = "0.4.45"
croner = "3.0.1"
# MISC
async-compression = { version = "0.4.42", features = ["tokio", "gzip"] }
schemars = { version = "1.2.1", features = ["indexmap2"] }
derive_builder = "0.20.2"
comfy-table = "7.2.2"
typeshare = "1.0.5"
wildcard = "0.3.0"
colored = "3.1.1"
bytes = "1.12.1"
regex = "1.13.1"
[profile.release]
strip = "debuginfo"
+674
View File
@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
+2
View File
@@ -0,0 +1,2 @@
import { run } from "./run.ts";
await run("build-komodo");
+5
View File
@@ -0,0 +1,5 @@
{
"imports": {
"@std/toml": "jsr:@std/toml"
}
}
+4
View File
@@ -0,0 +1,4 @@
const cmd = "km run -y action deploy-komodo-ui-change";
new Deno.Command("bash", {
args: ["-c", cmd],
}).spawn();
+2
View File
@@ -0,0 +1,2 @@
import { run } from "./run.ts";
await run("deploy-komodo");
+52
View File
@@ -0,0 +1,52 @@
import * as TOML from "@std/toml";
export const run = async (action: string) => {
const branch = await new Deno.Command("bash", {
args: ["-c", "git rev-parse --abbrev-ref HEAD"],
})
.output()
.then((r) => new TextDecoder("utf-8").decode(r.stdout).trim());
const cargo_toml_str = await Deno.readTextFile("Cargo.toml");
const prev_version = (
TOML.parse(cargo_toml_str) as {
workspace: { package: { version: string } };
}
).workspace.package.version;
const [version, tag, count] = prev_version.split("-");
const next_count = Number(count) + 1;
const next_version = `${version}-${tag}-${next_count}`;
await Deno.writeTextFile(
"Cargo.toml",
cargo_toml_str.replace(
`version = "${prev_version}"`,
`version = "${next_version}"`
)
);
// Cargo check first here to make sure lock file is updated before commit.
const cmd = `
cargo check
echo ""
git add --all
git commit --all --message "deploy ${version}-${tag}-${next_count}"
echo ""
git push
echo ""
km run -y action ${action} "KOMODO_BRANCH=${branch}&KOMODO_VERSION=${version}&KOMODO_TAG=${tag}-${next_count}"
`
.split("\n")
.map((line) => line.trim())
.filter((line) => line.length > 0 && !line.startsWith("//"))
.join(" && ");
new Deno.Command("bash", {
args: ["-c", cmd],
}).spawn();
};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[583],{7143:(e,t,s)=>{s.r(t),s.d(t,{default:()=>g});var n=s(4164),o=s(8774),i=s(4586),r=s(1656),c=s(1107);const l={features:"features_t9lD",featureSvg:"featureSvg_GfXr"};var a=s(4848);const d=[{title:"Automated builds \ud83d\udee0\ufe0f",description:(0,a.jsx)(a.Fragment,{children:"Build auto versioned docker images from git repos, trigger builds on git push"})},{title:"Deploy docker containers \ud83d\ude80",description:(0,a.jsx)(a.Fragment,{children:"Deploy containers, deploy docker compose, see uptime and logs across all your servers"})},{title:"Powered by Rust \ud83e\udd80",description:(0,a.jsx)(a.Fragment,{children:"The core API and periphery agent are written in Rust"})}];function h({title:e,description:t}){return(0,a.jsx)("div",{className:(0,n.A)("col col--4"),children:(0,a.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,a.jsx)(c.A,{as:"h3",children:e}),(0,a.jsx)("p",{children:t})]})})}function u(){return(0,a.jsx)("section",{className:l.features,children:(0,a.jsx)("div",{className:"container",children:(0,a.jsx)("div",{className:"row",children:d.map((e,t)=>(0,a.jsx)(h,{...e},t))})})})}const m={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN"};s(6540);function x({width:e="4rem"}){return(0,a.jsx)("img",{style:{width:e,height:"auto",opacity:.7},src:"img/monitor-lizard.png",alt:"monitor-lizard"})}function p(){const{siteConfig:e}=(0,i.A)();return(0,a.jsx)("header",{className:(0,n.A)("hero hero--primary",m.heroBanner),children:(0,a.jsxs)("div",{className:"container",children:[(0,a.jsx)("div",{style:{display:"flex",gap:"1rem",justifyContent:"center"},children:(0,a.jsxs)("div",{style:{position:"relative"},children:[(0,a.jsx)(x,{width:"600px"}),(0,a.jsx)("h1",{className:"hero__title",style:{margin:0,position:"absolute",top:"40%",left:"50%",transform:"translate(-50%, -50%)"},children:"Komodo"})]})}),(0,a.jsx)("p",{className:"hero__subtitle",children:e.tagline}),(0,a.jsx)("div",{style:{display:"flex",justifyContent:"center"},children:(0,a.jsxs)("div",{className:m.buttons,children:[(0,a.jsx)(o.A,{className:"button button--secondary button--lg",to:"/docs/intro",children:"Docs"}),(0,a.jsx)(o.A,{className:"button button--secondary button--lg",to:"https://github.com/moghtech/komodo",children:"Github"}),(0,a.jsx)(o.A,{className:"button button--secondary button--lg",to:"https://github.com/moghtech/komodo#screenshots",style:{width:"100%",boxSizing:"border-box",gridColumn:"span 2"},children:"Screenshots"}),(0,a.jsx)(o.A,{className:"button button--secondary button--lg",to:"https://demo.komo.do",style:{width:"100%",boxSizing:"border-box",gridColumn:"span 2"},children:"Demo"})]})})]})})}function g(){const{siteConfig:e}=(0,i.A)();return(0,a.jsxs)(r.A,{title:"Home",description:e.tagline,children:[(0,a.jsx)(p,{}),(0,a.jsx)("main",{children:(0,a.jsx)(u,{})})]})}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[237],{2237:(e,t,i)=>{i.r(t),i.d(t,{default:()=>d});i(6540);var n=i(1312),o=i(5500),s=i(1656),r=i(3363),a=i(4848);function d(){const e=(0,n.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.be,{title:e}),(0,a.jsx)(s.A,{children:(0,a.jsx)(r.A,{})})]})}},3363:(e,t,i)=>{i.d(t,{A:()=>a});i(6540);var n=i(4164),o=i(1312),s=i(1107),r=i(4848);function a({className:e}){return(0,r.jsx)("main",{className:(0,n.A)("container margin-vert--xl",e),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(s.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[345],{4689:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"resources/build-images/versioning","title":"Image Versioning","description":"Komodo uses a major.minor.patch versioning scheme to Build versioning. By default, every RunBuild will auto increment the Build\'s version patch number, and push the image to docker hub with the version tag, as well as the latest tag. A tag containing the latest short commit hash at the time the repo was cloned will also be created.","source":"@site/docs/resources/build-images/versioning.md","sourceDirName":"resources/build-images","slug":"/resources/build-images/versioning","permalink":"/docs/resources/build-images/versioning","draft":false,"unlisted":false,"editUrl":"https://github.com/moghtech/komodo/tree/main/docsite/docs/resources/build-images/versioning.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"Builders","permalink":"/docs/resources/build-images/builders"},"next":{"title":"Deploy Containers","permalink":"/docs/resources/deploy-containers/"}}');var i=n(4848),o=n(8453);const r={},a="Image Versioning",c={},d=[];function l(e){const t={code:"code",h1:"h1",header:"header",p:"p",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"image-versioning",children:"Image Versioning"})}),"\n",(0,i.jsxs)(t.p,{children:["Komodo uses a major.minor.patch versioning scheme to Build versioning. By default, every RunBuild will auto increment the Build's version patch number, and push the image to docker hub with the version tag, as well as the ",(0,i.jsx)(t.code,{children:"latest"})," tag. A tag containing the latest short commit hash at the time the repo was cloned will also be created."]}),"\n",(0,i.jsxs)(t.p,{children:['You can also turn off the auto incrementing feature, and manage the version yourself. In addition, you can configure a "version tag" on the build. This will postfix the version tag / commit hash tag with a custom label. For example, an image tag of ',(0,i.jsx)(t.code,{children:"dev"})," will produce tags like ",(0,i.jsx)(t.code,{children:"image_name:1.1.1-dev"})," and ",(0,i.jsx)(t.code,{children:"image_name:h3c87c-dev"}),"."]})]})}function u(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var s=n(6540);const i={},o=s.createContext(i);function r(e){const t=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[771],{483:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"resources/auto-update","title":"Automatic Updates","description":"Starting from v1.19.0, new Komodo installs will automatically create the","source":"@site/docs/resources/auto-update.md","sourceDirName":"resources","slug":"/resources/auto-update","permalink":"/docs/resources/auto-update","draft":false,"unlisted":false,"editUrl":"https://github.com/moghtech/komodo/tree/main/docsite/docs/resources/auto-update.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"Docker Compose","permalink":"/docs/resources/docker-compose"},"next":{"title":"Variables and Secrets","permalink":"/docs/resources/variables"}}');var s=o(4848),r=o(8453);const a={},i="Automatic Updates",c={},l=[{value:"How does it work?",id:"how-does-it-work",level:3}];function d(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"automatic-updates",children:"Automatic Updates"})}),"\n",(0,s.jsxs)(t.p,{children:["Starting from ",(0,s.jsx)(t.strong,{children:"v1.19.0"}),", new Komodo installs will automatically create the\n",(0,s.jsx)(t.strong,{children:"Global Auto Update"})," ",(0,s.jsx)(t.a,{href:"../resources/procedures#procedures",children:"Procedure"}),", scheduled daily.\nIf you don't have it, this is the Toml:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-toml",children:'[[procedure]]\nname = "Global Auto Update"\ndescription = "Pulls and auto updates Stacks and Deployments using \'poll_for_updates\' or \'auto_update\'."\ntags = ["system"]\nconfig.schedule = "Every day at 03:00"\n\n[[procedure.config.stage]]\nname = "Stage 1"\nenabled = true\nexecutions = [\n { execution.type = "GlobalAutoUpdate", execution.params = {}, enabled = true }\n]\n'})}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsxs)(t.p,{children:["You are also able to integrate ",(0,s.jsx)(t.code,{children:"GlobalAutoUpdate"})," into other Procedures\nto coordinate the timing with other processes, such as backup. There is\nnothing special about this Procedure, it's just created by default for\nguidance / convenience."]})}),"\n",(0,s.jsx)(t.h3,{id:"how-does-it-work",children:"How does it work?"}),"\n",(0,s.jsxs)(t.p,{children:["Both Stacks and Deployments allow you to configure ",(0,s.jsx)(t.strong,{children:"Poll for Updates"})," or ",(0,s.jsx)(t.strong,{children:"Auto Update"}),".\nWhen ",(0,s.jsx)(t.a,{href:"https://docs.rs/komodo_client/latest/komodo_client/api/execute/struct.GlobalAutoUpdate.html",children:(0,s.jsx)(t.strong,{children:"GlobalAutoUpdate"})}),"\nis run, Komodo will loop through all the resources with either of these options enabled,\nand run ",(0,s.jsx)(t.a,{href:"https://docs.rs/komodo_client/latest/komodo_client/api/execute/struct.PullStack.html",children:(0,s.jsx)(t.strong,{children:"PullStack"})})," / ",(0,s.jsx)(t.a,{href:"https://docs.rs/komodo_client/latest/komodo_client/api/execute/struct.PullDeployment.html",children:(0,s.jsx)(t.strong,{children:"PullDeployment"})}),"\nin order to pick up any newer images ",(0,s.jsx)(t.strong,{children:"at the same tag"}),'.\nNote that in order to work, it requires use of a "Rolling" image tag, such as ',(0,s.jsx)(t.code,{children:":latest"}),"."]}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsxs)(t.p,{children:["If you use git sources Stacks and want to automatically update image tags, check out\n",(0,s.jsx)(t.a,{href:"https://github.com/renovatebot/renovate?tab=readme-ov-file#what-is-the-mend-renovate-cli",children:"Renovate"})]})}),"\n",(0,s.jsxs)(t.p,{children:["For resources with ",(0,s.jsx)(t.strong,{children:"Poll for Updates"})," enabled and an Alerter configured, it will\nsend an alert that a newer image is available, and display the update available indicator in the UI"]}),"\n",(0,s.jsxs)(t.p,{children:["For resource with ",(0,s.jsx)(t.strong,{children:"Auto Update"})," enabled, it will go ahead and Redeploy ",(0,s.jsx)(t.em,{children:"just the services"})," with\nnewer images (by default). If an Alerter is configured, it will also send an alert that this occured."]})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,o)=>{o.d(t,{R:()=>a,x:()=>i});var n=o(6540);const s={},r=n.createContext(s);function a(e){const t=n.useContext(r);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]);
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[122],{8453:(e,s,n)=>{n.d(s,{R:()=>t,x:()=>c});var o=n(6540);const r={},i=o.createContext(r);function t(e){const s=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),o.createElement(i.Provider,{value:s},e.children)}},9749:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>c,default:()=>a,frontMatter:()=>t,metadata:()=>o,toc:()=>l});const o=JSON.parse('{"id":"resources/build-images/pre-build","title":"Pre-build command","description":"Sometimes a command needs to be run before running `docker build`, you can configure this in the pre build section.","source":"@site/docs/resources/build-images/pre-build.md","sourceDirName":"resources/build-images","slug":"/resources/build-images/pre-build","permalink":"/docs/resources/build-images/pre-build","draft":false,"unlisted":false,"editUrl":"https://github.com/moghtech/komodo/tree/main/docsite/docs/resources/build-images/pre-build.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"Configuration","permalink":"/docs/resources/build-images/configuration"},"next":{"title":"Builders","permalink":"/docs/resources/build-images/builders"}}');var r=n(4848),i=n(8453);const t={},c="Pre-build command",d={},l=[];function u(e){const s={code:"code",em:"em",h1:"h1",header:"header",p:"p",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"pre-build-command",children:"Pre-build command"})}),"\n",(0,r.jsxs)(s.p,{children:["Sometimes a command needs to be run before running ",(0,r.jsx)(s.code,{children:"docker build"}),", you can configure this in the ",(0,r.jsx)(s.em,{children:"pre build"})," section."]}),"\n",(0,r.jsxs)(s.p,{children:["There are two fields to pass for ",(0,r.jsx)(s.em,{children:"pre build"}),". the first is ",(0,r.jsx)(s.em,{children:"path"}),", which changes the working directory. To run the command in the root of the repo, just pass ",(0,r.jsx)(s.code,{children:"."}),". The second field is ",(0,r.jsx)(s.em,{children:"command"}),", this is the shell command to be executed after the repo is cloned."]}),"\n",(0,r.jsxs)(s.p,{children:["For example, say your repo had a folder in it called ",(0,r.jsx)(s.code,{children:"scripts"})," with a shell script ",(0,r.jsx)(s.code,{children:"on-clone.sh"}),". You would give ",(0,r.jsx)(s.em,{children:"path"})," as ",(0,r.jsx)(s.code,{children:"scripts"})," and command as ",(0,r.jsx)(s.code,{children:"sh on-clone.sh"}),". Or you could make ",(0,r.jsx)(s.em,{children:"path"})," just ",(0,r.jsx)(s.code,{children:"."})," and then the command would be ",(0,r.jsx)(s.code,{children:"sh scripts/on-clone.sh"}),". Either way works fine."]})]})}function a(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[647],{7121:(e,s,r)=>{r.r(s),r.d(s,{default:()=>i});r(6540);var c=r(4164),t=r(7559),u=r(5500),a=r(2831),d=r(1656),n=r(4848);function i(e){return(0,n.jsx)(u.e3,{className:(0,c.A)(t.G.wrapper.docsPages),children:(0,n.jsx)(d.A,{children:(0,a.v)(e.route.routes)})})}}}]);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[464],{185:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>o,toc:()=>l});const o=JSON.parse('{"id":"resources/deploy-containers/lifetime-management","title":"Container Management","description":"The lifetime of a docker container is more like a virtual machine. They can be created, started, stopped, and destroyed. Komodo will display the state of the container and provides an API to manage all your container\'s lifetimes.","source":"@site/docs/resources/deploy-containers/lifetime-management.md","sourceDirName":"resources/deploy-containers","slug":"/resources/deploy-containers/lifetime-management","permalink":"/docs/resources/deploy-containers/lifetime-management","draft":false,"unlisted":false,"editUrl":"https://github.com/moghtech/komodo/tree/main/docsite/docs/resources/deploy-containers/lifetime-management.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"Configuration","permalink":"/docs/resources/deploy-containers/configuration"},"next":{"title":"Docker Compose","permalink":"/docs/resources/docker-compose"}}');var i=n(4848),a=n(8453);const r={},s="Container Management",c={},l=[{value:"Stopping a Container",id:"stopping-a-container",level:3},{value:"Container Redeploy",id:"container-redeploy",level:3}];function d(e){const t={em:"em",h1:"h1",h3:"h3",header:"header",p:"p",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"container-management",children:"Container Management"})}),"\n",(0,i.jsx)(t.p,{children:"The lifetime of a docker container is more like a virtual machine. They can be created, started, stopped, and destroyed. Komodo will display the state of the container and provides an API to manage all your container's lifetimes."}),"\n",(0,i.jsx)(t.p,{children:"This is achieved internally by running the appropriate docker command for the requested action (docker stop, docker start, etc)."}),"\n",(0,i.jsx)(t.h3,{id:"stopping-a-container",children:"Stopping a Container"}),"\n",(0,i.jsxs)(t.p,{children:["Sometimes you want to stop a running application but preserve its logs and configuration, either to be restarted later or to view the logs at a later time. It is more like ",(0,i.jsx)(t.em,{children:"pausing"})," the application with its current config, as no configuration (like environment variable, volume mounts, etc.) will be changed when the container is started again."]}),"\n",(0,i.jsxs)(t.p,{children:["Note that in order to restart an application with updated configuration, it must be ",(0,i.jsx)(t.em,{children:"redeployed"}),". stopping and starting a container again will keep all configuration as it was when the container was initially created."]}),"\n",(0,i.jsx)(t.h3,{id:"container-redeploy",children:"Container Redeploy"}),"\n",(0,i.jsx)(t.p,{children:"Redeploying is the action of destroying a container and recreating it. If you update deployment config, these changes will not take effect until the container is redeployed. Just note this will destroy the previous containers logs along with the container itself."})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>s});var o=n(6540);const i={},a=o.createContext(i);function r(e){const t=o.useContext(a);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(a.Provider,{value:t},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[339],{4191:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>a,default:()=>p,frontMatter:()=>i,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"ecosystem/api","title":"API and Clients","description":"Komodo Core exposes an RPC-like HTTP API to read data, write configuration, and execute actions.","source":"@site/docs/ecosystem/api.md","sourceDirName":"ecosystem","slug":"/ecosystem/api","permalink":"/docs/ecosystem/api","draft":false,"unlisted":false,"editUrl":"https://github.com/moghtech/komodo/tree/main/docsite/docs/ecosystem/api.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"Komodo CLI","permalink":"/docs/ecosystem/cli"},"next":{"title":"Community","permalink":"/docs/ecosystem/community"}}');var o=n(4848),c=n(8453);const i={},a="API and Clients",r={},d=[{value:"Rust Client",id:"rust-client",level:2},{value:"Typescript Client",id:"typescript-client",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",strong:"strong",...(0,c.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"api-and-clients",children:"API and Clients"})}),"\n",(0,o.jsxs)(t.p,{children:["Komodo Core exposes an RPC-like HTTP API to read data, write configuration, and execute actions.\nThere are typesafe clients available in\n",(0,o.jsx)(t.a,{href:"/docs/ecosystem/api#rust-client",children:(0,o.jsx)(t.strong,{children:"Rust"})})," and ",(0,o.jsx)(t.a,{href:"/docs/ecosystem/api#typescript-client",children:(0,o.jsx)(t.strong,{children:"Typescript"})}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["The full API documentation is ",(0,o.jsx)(t.a,{href:"https://docs.rs/komodo_client/latest/komodo_client/api/index.html",children:(0,o.jsx)(t.strong,{children:"available here"})}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"rust-client",children:"Rust Client"}),"\n",(0,o.jsxs)(t.p,{children:["The Rust client is published to crates.io at ",(0,o.jsx)(t.a,{href:"https://crates.io/crates/komodo_client",children:"komodo_client"}),"."]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-rust",children:'let komodo = KomodoClient::new("https://demo.komo.do", "your_key", "your_secret")\n .with_healthcheck()\n .await?;\n\nlet stacks = komodo.read(ListStacks::default()).await?;\n\nlet update = komodo\n .execute(DeployStack {\n stack: stacks[0].name.clone(),\n stop_time: None\n })\n .await?;\n'})}),"\n",(0,o.jsx)(t.h2,{id:"typescript-client",children:"Typescript Client"}),"\n",(0,o.jsxs)(t.p,{children:["The Typescript client is published to NPM at ",(0,o.jsx)(t.a,{href:"https://www.npmjs.com/package/komodo_client",children:"komodo_client"}),"."]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-ts",children:'import { KomodoClient, Types } from "komodo_client";\n\nconst komodo = KomodoClient("https://demo.komo.do", {\n type: "api-key",\n params: {\n key: "your_key",\n secret: "your secret",\n },\n});\n\n// Inferred as Types.StackListItem[]\nconst stacks = await komodo.read("ListStacks", {});\n\n// Inferred as Types.Update\nconst update = await komodo.execute("DeployStack", {\n stack: stacks[0].name,\n});\n'})})]})}function p(e={}){const{wrapper:t}={...(0,c.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>a});var s=n(6540);const o={},c=s.createContext(o);function i(e){const t=s.useContext(c);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),s.createElement(c.Provider,{value:t},e.children)}}}]);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[235],{8552:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[98],{1723:(n,e,s)=>{s.r(e),s.d(e,{default:()=>l});s(6540);var r=s(5500);function o(n,e){return`docs-${n}-${e}`}var t=s(3025),c=s(2831),i=s(1463),u=s(4848);function a(n){const{version:e}=n;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(i.A,{version:e.version,tag:o(e.pluginId,e.version)}),(0,u.jsx)(r.be,{children:e.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function d(n){const{version:e,route:s}=n;return(0,u.jsx)(r.e3,{className:e.className,children:(0,u.jsx)(t.n,{version:e,children:(0,c.v)(s.routes)})})}function l(n){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...n}),(0,u.jsx)(d,{...n})]})}}}]);
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[742],{7093:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[39],{3021:(e,t,s)=>{s.d(t,{A:()=>b});var n=s(6540),r=s(4164),o=s(6972),c=s(8774),i=s(4586);const a=["zero","one","two","few","many","other"];function l(e){return a.filter(t=>e.includes(t))}const u={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function d(){const{i18n:{currentLocale:e}}=(0,i.A)();return(0,n.useMemo)(()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:l(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),u}},[e])}function m(){const e=d();return{selectMessage:(t,s)=>function(e,t,s){const n=e.split("|");if(1===n.length)return n[0];n.length>s.pluralForms.length&&console.error(`For locale=${s.locale}, a maximum of ${s.pluralForms.length} plural forms are expected (${s.pluralForms.join(",")}), but the message contains ${n.length}: ${e}`);const r=s.select(t),o=s.pluralForms.indexOf(r);return n[Math.min(o,n.length-1)]}(s,t,e)}}var h=s(6654),f=s(1312),p=s(1107);const x={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var g=s(4848);function y({className:e,href:t,children:s}){return(0,g.jsx)(c.A,{href:t,className:(0,r.A)("card padding--lg",x.cardContainer,e),children:s})}function j({className:e,href:t,icon:s,title:n,description:o}){return(0,g.jsxs)(y,{href:t,className:e,children:[(0,g.jsxs)(p.A,{as:"h2",className:(0,r.A)("text--truncate",x.cardTitle),title:n,children:[s," ",n]}),o&&(0,g.jsx)("p",{className:(0,r.A)("text--truncate",x.cardDescription),title:o,children:o})]})}function N({item:e}){const t=(0,o.Nr)(e),s=function(){const{selectMessage:e}=m();return t=>e(t,(0,f.T)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return t?(0,g.jsx)(j,{className:e.className,href:t,icon:"\ud83d\uddc3\ufe0f",title:e.label,description:e.description??s(e.items.length)}):null}function C({item:e}){const t=(0,h.A)(e.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",s=(0,o.cC)(e.docId??void 0);return(0,g.jsx)(j,{className:e.className,href:e.href,icon:t,title:e.label,description:e.description??s?.description})}function w({item:e}){switch(e.type){case"link":return(0,g.jsx)(C,{item:e});case"category":return(0,g.jsx)(N,{item:e});default:throw new Error(`unknown item type ${JSON.stringify(e)}`)}}const k={docCardListItem:"docCardListItem_W1sv"};function v({className:e}){const t=(0,o.a4)();return(0,g.jsx)(b,{items:t,className:e})}function A({item:e}){return(0,g.jsx)("article",{className:(0,r.A)(k.docCardListItem,"col col--6"),children:(0,g.jsx)(w,{item:e})})}function b(e){const{items:t,className:s}=e;if(!t)return(0,g.jsx)(v,{...e});const n=(0,o.d1)(t);return(0,g.jsx)("section",{className:(0,r.A)("row",s),children:n.map((e,t)=>(0,g.jsx)(A,{item:e},t))})}},7350:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>n,toc:()=>u});const n=JSON.parse('{"id":"ecosystem/index","title":"Ecosystem","description":"","source":"@site/docs/ecosystem/index.mdx","sourceDirName":"ecosystem","slug":"/ecosystem","permalink":"/docs/ecosystem","draft":false,"unlisted":false,"editUrl":"https://github.com/moghtech/komodo/tree/main/docsite/docs/ecosystem/index.mdx","tags":[],"version":"current","frontMatter":{"slug":"/ecosystem"},"sidebar":"docs","previous":{"title":"Permissioning","permalink":"/docs/resources/permissioning"},"next":{"title":"Komodo CLI","permalink":"/docs/ecosystem/cli"}}');var r=s(4848),o=s(8453),c=s(3021);const i={slug:"/ecosystem"},a="Ecosystem",l={},u=[];function d(e){const t={h1:"h1",header:"header",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"ecosystem",children:"Ecosystem"})}),"\n","\n",(0,r.jsx)(c.A,{})]})}function m(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>c,x:()=>i});var n=s(6540);const r={},o=n.createContext(r);function c(e){const t=n.useContext(o);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocsite=self.webpackChunkdocsite||[]).push([[847],{4817:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"setup/version-upgrades","title":"Version Upgrades","description":"Most version upgrades only require a redeployment of the Core container after pulling the latest version, and are fully backward compatible with the periphery clients, which may be updated later on as convenient. This is the default, and will be the case unless specifically mentioned in the version release notes.","source":"@site/docs/setup/version-upgrades.md","sourceDirName":"setup","slug":"/setup/version-upgrades","permalink":"/docs/setup/version-upgrades","draft":false,"unlisted":false,"editUrl":"https://github.com/moghtech/komodo/tree/main/docsite/docs/setup/version-upgrades.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docs","previous":{"title":"Advanced Configuration","permalink":"/docs/setup/advanced"},"next":{"title":"Resources","permalink":"/docs/resources/"}}');var r=n(4848),o=n(8453);const i={},a="Version Upgrades",c={},d=[];function l(e){const t={a:"a",h1:"h1",header:"header",p:"p",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"version-upgrades",children:"Version Upgrades"})}),"\n",(0,r.jsxs)(t.p,{children:["Most version upgrades only require a redeployment of the Core container after pulling the latest version, and are fully backward compatible with the periphery clients, which may be updated later on as convenient. This is the default, and will be the case unless specifically mentioned in the ",(0,r.jsx)(t.a,{href:"https://github.com/moghtech/komodo/releases",children:"version release notes"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"Some Core API upgrades may change behavior such as building / cloning, and require updating the Periphery binaries to match the Core version before this functionality can be restored. This will be specifically mentioned in the release notes."})]})}function u(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>a});var s=n(6540);const r={},o=s.createContext(r);function i(e){const t=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-61
View File
@@ -1,61 +0,0 @@
/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
* @license MIT */
/**
* @license React
* react-dom-client.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react-dom.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react-jsx-runtime.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* scheduler.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v16.13.1
* react-is.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
File diff suppressed because one or more lines are too long
+33
View File
@@ -0,0 +1,33 @@
## Builds the Komodo Core, Periphery, and Util binaries
## for a specific architecture. Requires OpenSSL 3 or later.
FROM rust:1.97.1-bookworm AS builder
RUN cargo install cargo-strip
WORKDIR /builder
COPY Cargo.toml Cargo.lock ./
COPY ./lib ./lib
COPY ./client/core/rs ./client/core/rs
COPY ./client/periphery ./client/periphery
COPY ./bin/core ./bin/core
COPY ./bin/periphery ./bin/periphery
COPY ./bin/cli ./bin/cli
COPY ./xtask ./xtask
# Compile bin
RUN \
cargo build -p komodo_core --release && \
cargo build -p komodo_periphery --release && \
cargo build -p komodo_cli --release && \
cargo strip
# Copy just the binaries to scratch image
FROM scratch
COPY --from=builder /builder/target/release/core /core
COPY --from=builder /builder/target/release/periphery /periphery
COPY --from=builder /builder/target/release/km /km
LABEL org.opencontainers.image.source="https://github.com/moghtech/komodo"
LABEL org.opencontainers.image.description="Komodo Binaries"
LABEL org.opencontainers.image.licenses="GPL-3.0"
+36
View File
@@ -0,0 +1,36 @@
## Builds the Komodo Core, Periphery, and Util binaries
## for a specific architecture. Requires OpenSSL 3 or later.
## Uses chef for dependency caching to help speed up back-to-back builds.
FROM lukemathwalker/cargo-chef:latest-rust-1.97.1-bookworm AS chef
WORKDIR /builder
# Plan just the RECIPE to see if things have changed
FROM chef AS planner
COPY . .
RUN cargo chef prepare --recipe-path recipe.json
FROM chef AS builder
RUN cargo install cargo-strip
COPY --from=planner /builder/recipe.json recipe.json
# Build JUST dependencies - cached layer
RUN cargo chef cook --release --recipe-path recipe.json
# NOW copy again (this time into builder) and build app
COPY . .
RUN \
cargo build --release --bin core && \
cargo build --release --bin periphery && \
cargo build --release --bin km && \
cargo strip
# Copy just the binaries to scratch image
FROM scratch
COPY --from=builder /builder/target/release/core /core
COPY --from=builder /builder/target/release/periphery /periphery
COPY --from=builder /builder/target/release/km /km
LABEL org.opencontainers.image.source="https://github.com/moghtech/komodo"
LABEL org.opencontainers.image.description="Komodo Binaries"
LABEL org.opencontainers.image.licenses="GPL-3.0"
+40
View File
@@ -0,0 +1,40 @@
[package]
name = "komodo_cli"
description = "Command line tool for Komodo"
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
[[bin]]
name = "km"
path = "src/main.rs"
[dependencies]
# local
komodo_client = { workspace = true, features = ["cli"] }
mogh_secret_file.workspace = true
mogh_pki.workspace = true
database.workspace = true
mogh_config.workspace = true
mogh_logger.workspace = true
# external
futures-util.workspace = true
comfy-table.workspace = true
tokio-util.workspace = true
serde_json.workspace = true
crossterm.workspace = true
serde_qs.workspace = true
wildcard.workspace = true
tracing.workspace = true
colored.workspace = true
dotenvy.workspace = true
anyhow.workspace = true
bcrypt.workspace = true
chrono.workspace = true
rustls.workspace = true
tokio.workspace = true
serde.workspace = true
clap.workspace = true
envy.workspace = true
+118
View File
@@ -0,0 +1,118 @@
# Komodo CLI
Komodo CLI is a tool to execute actions on your Komodo instance from shell scripts.
## Install
```sh
cargo install komodo_cli
```
Note: On Ubuntu, also requires `apt install build-essential pkg-config libssl-dev`.
## Usage
### Credentials
Configure a file `~/.config/komodo/creds.toml` file with contents:
```toml
url = "https://your.komodo.address"
key = "YOUR-API-KEY"
secret = "YOUR-API-SECRET"
```
Note. You can specify a different creds file by using `--creds ./other/path.toml`.
You can also bypass using any file and pass the information using `--url`, `--key`, `--secret`:
```sh
komodo --url "https://your.komodo.address" --key "YOUR-API-KEY" --secret "YOUR-API-SECRET" ...
```
### Run Executions
```sh
# Triggers an example build
komodo execute run-build test_build
```
#### Manual
`komodo --help`
```md
Command line tool to execute Komodo actions
Usage: komodo [OPTIONS] <COMMAND>
Commands:
execute Runs an execution
help Print this message or the help of the given subcommand(s)
Options:
--creds <CREDS> The path to a creds file [default: /Users/max/.config/komodo/creds.toml]
--url <URL> Pass url in args instead of creds file
--key <KEY> Pass api key in args instead of creds file
--secret <SECRET> Pass api secret in args instead of creds file
-y, --yes Always continue on user confirmation prompts
-h, --help Print help (see more with '--help')
-V, --version Print version
```
`komodo execute --help`
```md
Runs an execution
Usage: komodo execute <COMMAND>
Commands:
none The "null" execution. Does nothing
run-procedure Runs the target procedure. Response: [Update]
run-build Runs the target build. Response: [Update]
cancel-build Cancels the target build. Only does anything if the build is `building` when called. Response: [Update]
deploy Deploys the container for the target deployment. Response: [Update]
start-deployment Starts the container for the target deployment. Response: [Update]
restart-deployment Restarts the container for the target deployment. Response: [Update]
pause-deployment Pauses the container for the target deployment. Response: [Update]
unpause-deployment Unpauses the container for the target deployment. Response: [Update]
stop-deployment Stops the container for the target deployment. Response: [Update]
destroy-deployment Stops and destroys the container for the target deployment. Reponse: [Update]
clone-repo Clones the target repo. Response: [Update]
pull-repo Pulls the target repo. Response: [Update]
build-repo Builds the target repo, using the attached builder. Response: [Update]
cancel-repo-build Cancels the target repo build. Only does anything if the repo build is `building` when called. Response: [Update]
start-container Starts the container on the target server. Response: [Update]
restart-container Restarts the container on the target server. Response: [Update]
pause-container Pauses the container on the target server. Response: [Update]
unpause-container Unpauses the container on the target server. Response: [Update]
stop-container Stops the container on the target server. Response: [Update]
destroy-container Stops and destroys the container on the target server. Reponse: [Update]
start-all-containers Starts all containers on the target server. Response: [Update]
restart-all-containers Restarts all containers on the target server. Response: [Update]
pause-all-containers Pauses all containers on the target server. Response: [Update]
unpause-all-containers Unpauses all containers on the target server. Response: [Update]
stop-all-containers Stops all containers on the target server. Response: [Update]
prune-containers Prunes the docker containers on the target server. Response: [Update]
delete-network Delete a docker network. Response: [Update]
prune-networks Prunes the docker networks on the target server. Response: [Update]
delete-image Delete a docker image. Response: [Update]
prune-images Prunes the docker images on the target server. Response: [Update]
delete-volume Delete a docker volume. Response: [Update]
prune-volumes Prunes the docker volumes on the target server. Response: [Update]
prune-system Prunes the docker system on the target server, including volumes. Response: [Update]
run-sync Runs the target resource sync. Response: [Update]
deploy-stack Deploys the target stack. `docker compose up`. Response: [Update]
start-stack Starts the target stack. `docker compose start`. Response: [Update]
restart-stack Restarts the target stack. `docker compose restart`. Response: [Update]
pause-stack Pauses the target stack. `docker compose pause`. Response: [Update]
unpause-stack Unpauses the target stack. `docker compose unpause`. Response: [Update]
stop-stack Starts the target stack. `docker compose stop`. Response: [Update]
destroy-stack Destoys the target stack. `docker compose down`. Response: [Update]
sleep
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
```
### --yes
You can use `--yes` to avoid any human prompt to continue, for use in automated environments.
+25
View File
@@ -0,0 +1,25 @@
FROM rust:1.97.1-trixie AS builder
RUN cargo install cargo-strip
WORKDIR /builder
COPY Cargo.toml Cargo.lock ./
COPY ./lib ./lib
COPY ./client/core/rs ./client/core/rs
COPY ./client/periphery ./client/periphery
COPY ./bin/cli ./bin/cli
# Compile bin
RUN cargo build -p komodo_cli --release && cargo strip
# Copy binaries to distroless base
FROM gcr.io/distroless/cc
COPY --from=builder /builder/target/release/km /usr/local/bin/km
ENV KOMODO_CLI_CONFIG_PATHS="/config"
CMD [ "km" ]
LABEL org.opencontainers.image.source="https://github.com/moghtech/komodo"
LABEL org.opencontainers.image.description="Komodo CLI"
LABEL org.opencontainers.image.licenses="GPL-3.0"
+135
View File
@@ -0,0 +1,135 @@
# Copy Database Utility
Copy the Komodo database contents between running, mongo-compatible databases.
Can be used to move between MongoDB / FerretDB, or upgrade from FerretDB v1 to v2.
```yaml
services:
copy_database:
image: ghcr.io/moghtech/komodo-cli
command: km database copy -y
environment:
KOMODO_DATABASE_URI: mongodb://${KOMODO_DB_USERNAME}:${KOMODO_DB_PASSWORD}@source:27017
KOMODO_DATABASE_DB_NAME: ${KOMODO_DATABASE_DB_NAME:-komodo}
KOMODO_CLI_DATABASE_TARGET_URI: mongodb://${KOMODO_DB_USERNAME}:${KOMODO_DB_PASSWORD}@target:27017
KOMODO_CLI_DATABASE_TARGET_DB_NAME: ${KOMODO_DATABASE_DB_NAME:-komodo}
```
## FerretDB v2 Update Guide
Up to Komodo 1.17.5, users who wanted to use Postgres / Sqlite were instructed to deploy FerretDB v1.
Now that v2 is out however, v1 will go largely unsupported. Users are recommended to migrate to v2 for
the best performance and ongoing support / updates, however the internal data structures
have changed and this cannot be done in-place.
Also note that FerretDB v2 no longer supports Sqlite, and only supports
a [customized Postgres distribution](https://docs.ferretdb.io/installation/documentdb/docker/).
Nonetheless, it remains a solid option for hosts which [do not support mongo](https://github.com/moghtech/komodo/issues/59).
Also note, the same basic process outlined below can also be used to move between MongoDB and FerretDB, just replace FerretDB v2
with the database you wish to move to.
### **Step 1**: *Add* the new database to the top of your existing Komodo compose file.
**Don't forget to also add the new volumes.**
```yaml
## In Komodo compose.yaml
services:
postgres2:
# Recommended: Pin to a specific version
# https://github.com/FerretDB/documentdb/pkgs/container/postgres-documentdb
image: ghcr.io/ferretdb/postgres-documentdb
labels:
komodo.skip: # Prevent Komodo from stopping with StopAllContainers
restart: unless-stopped
# ports:
# - 5432:5432
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${KOMODO_DB_USERNAME}
POSTGRES_PASSWORD: ${KOMODO_DB_PASSWORD}
POSTGRES_DB: postgres # Do not change
ferretdb2:
# Recommended: Pin to a specific version
# https://github.com/FerretDB/FerretDB/pkgs/container/ferretdb
image: ghcr.io/ferretdb/ferretdb
labels:
komodo.skip: # Prevent Komodo from stopping with StopAllContainers
restart: unless-stopped
depends_on:
- postgres2
# ports:
# - 27017:27017
volumes:
- ferretdb-state:/state
environment:
FERRETDB_POSTGRESQL_URL: postgres://${KOMODO_DB_USERNAME}:${KOMODO_DB_PASSWORD}@postgres2:5432/postgres
...(unchanged)
volumes:
...(unchanged)
postgres-data:
ferretdb-state:
```
### **Step 2**: *Add* the database copy utility to Komodo compose file.
The SOURCE_URI points to the existing database, ie the old FerretDB v1, and it depends
on whether it was deployed using Postgres or Sqlite. The example below uses the Postgres one,
but if you use Sqlite it should just be something like `mongodb://ferretdb:27017`.
```yaml
## In Komodo compose.yaml
services:
...(new database)
copy_database:
image: ghcr.io/moghtech/komodo-cli
command: km database copy -y
environment:
KOMODO_DATABASE_URI: mongodb://${KOMODO_DB_USERNAME}:${KOMODO_DB_PASSWORD}@ferretdb:27017/${KOMODO_DATABASE_DB_NAME:-komodo}?authMechanism=PLAIN
KOMODO_DATABASE_DB_NAME: ${KOMODO_DATABASE_DB_NAME:-komodo}
KOMODO_CLI_DATABASE_TARGET_URI: mongodb://${KOMODO_DB_USERNAME}:${KOMODO_DB_PASSWORD}@ferretdb2:27017
KOMODO_CLI_DATABASE_TARGET_DB_NAME: ${KOMODO_DATABASE_DB_NAME:-komodo}
...(unchanged)
```
### **Step 3**: *Compose Up* the new additions
Run `docker compose -p komodo --env-file compose.env -f xxxxx.compose.yaml up -d`, filling in the name of your compose.yaml.
This will start up both the old and new database, and copy the data to the new one.
Wait a few moments for the `copy_database` service to finish. When it exits,
confirm the logs show the data was moved successfully, and move on to the next step.
### **Step 4**: Point Komodo Core to the new database
In your Komodo compose.yaml, first *comment out* the `copy_database` service and old ferretdb v1 service/s.
Then update the `core` service environment to point to `ferretdb2`.
```yaml
services:
...
core:
...(unchanged)
environment:
KOMODO_DATABASE_ADDRESS: ferretdb2:27017
KOMODO_DATABASE_USERNAME: ${KOMODO_DB_USERNAME}
KOMODO_DATABASE_PASSWORD: ${KOMODO_DB_PASSWORD}
```
### **Step 5**: Final *Compose Up*
Repeat the same `docker compose` command as before to apply the changes, and then try navigating to your Komodo web page.
If it works, congrats, **you are done**. You can clean up the compose file if you would like, removing the old volumes etc.
If it does not work, check the logs for any obvious issues, and if necessary you can undo the previous steps
to go back to using the previous database.
+29
View File
@@ -0,0 +1,29 @@
## Assumes the latest binaries for x86_64 and aarch64 are already built (by binaries.Dockerfile).
## Since theres no heavy build here, QEMU multi-arch builds are fine for this image.
ARG BINARIES_IMAGE=ghcr.io/moghtech/komodo-binaries:2
ARG X86_64_BINARIES=${BINARIES_IMAGE}-x86_64
ARG AARCH64_BINARIES=${BINARIES_IMAGE}-aarch64
# This is required to work with COPY --from
FROM ${X86_64_BINARIES} AS x86_64
FROM ${AARCH64_BINARIES} AS aarch64
FROM debian:trixie-slim
WORKDIR /app
## Copy both binaries initially, but only keep appropriate one for the TARGETPLATFORM.
COPY --from=x86_64 /km /app/arch/linux/amd64
COPY --from=aarch64 /km /app/arch/linux/arm64
ARG TARGETPLATFORM
RUN mv /app/arch/${TARGETPLATFORM} /usr/local/bin/km && rm -r /app/arch
ENV KOMODO_CLI_CONFIG_PATHS="/config"
CMD [ "km" ]
LABEL org.opencontainers.image.source="https://github.com/moghtech/komodo"
LABEL org.opencontainers.image.description="Komodo CLI"
LABEL org.opencontainers.image.licenses="GPL-3.0"
+4
View File
@@ -0,0 +1,4 @@
[install-cli]
alias = "ic"
description = "installs the komodo-cli, available on the command line as 'km'"
cmd = "cargo install --path ."
+18
View File
@@ -0,0 +1,18 @@
## Assumes the latest binaries for the required arch are already built (by binaries.Dockerfile).
ARG BINARIES_IMAGE=ghcr.io/moghtech/komodo-binaries:2
# This is required to work with COPY --from
FROM ${BINARIES_IMAGE} AS binaries
FROM gcr.io/distroless/cc
COPY --from=binaries /km /usr/local/bin/km
ENV KOMODO_CLI_CONFIG_PATHS="/config"
CMD [ "km" ]
LABEL org.opencontainers.image.source="https://github.com/moghtech/komodo"
LABEL org.opencontainers.image.description="Komodo CLI"
LABEL org.opencontainers.image.licenses="GPL-3.0"
+312
View File
@@ -0,0 +1,312 @@
use std::collections::{HashMap, HashSet};
use anyhow::Context;
use colored::Colorize;
use comfy_table::{Attribute, Cell, Color};
use futures_util::{
FutureExt, TryStreamExt, stream::FuturesUnordered,
};
use komodo_client::{
api::read::{self, ListAllContainers, ListServers},
entities::{
config::cli::args::container::{
Container, ContainerCommand, InspectContainer,
},
docker::{
self,
container::{
ContainerListItem, ContainerSortBy, ContainerStateStatusEnum,
},
},
},
};
use crate::{
command::{
PrintTable, clamp_sha, matches_wildcards, parse_wildcards,
print_items,
},
config::cli_config,
};
pub async fn handle(container: &Container) -> anyhow::Result<()> {
match &container.command {
None => list_containers(container).await,
Some(ContainerCommand::Inspect(inspect)) => {
inspect_container(inspect).await
}
}
}
async fn list_containers(
Container {
all,
down,
links,
reverse,
containers: terms,
images,
networks,
servers,
format,
page,
command: _,
}: &Container,
) -> anyhow::Result<()> {
let client = super::komodo_client().await?;
let (server_map, containers) = tokio::try_join!(
client
.read(ListServers::default())
.map(|res| res.map(|res| res
.into_iter()
.map(|s| (s.id.clone(), s))
.collect::<HashMap<_, _>>())),
client.read(ListAllContainers {
servers: Default::default(),
tags: Default::default(),
terms: terms.clone(),
state: Default::default(),
limit: Some(100),
// Page is more naturally given starting as 1, 2, 3.
page: if *page == 0 { 0 } else { *page - 1 },
sort_by: ContainerSortBy::Server,
sort_desc: false,
}),
)?;
// (Option<Server Name>, Container)
let containers = containers.into_iter().map(|c| {
let server = if let Some(server_id) = c.server_id.as_ref()
&& let Some(server) = server_map.get(server_id)
{
server
} else {
return (None, c);
};
(Some(server.name.as_str()), c)
});
let servers = parse_wildcards(servers);
let images = parse_wildcards(images);
let networks = parse_wildcards(networks);
let mut containers = containers
.into_iter()
.filter(|(server_name, c)| {
let state_check = if *all {
true
} else if *down {
!matches!(c.state, ContainerStateStatusEnum::Running)
} else {
matches!(c.state, ContainerStateStatusEnum::Running)
};
let network_check = matches_wildcards(
&networks,
&c.network_mode
.as_deref()
.map(|n| vec![n])
.unwrap_or_default(),
) || matches_wildcards(
&networks,
&c.networks.iter().map(String::as_str).collect::<Vec<_>>(),
);
state_check
&& network_check
&& matches_wildcards(
&servers,
&server_name
.as_deref()
.map(|i| vec![i])
.unwrap_or_default(),
)
&& matches_wildcards(
&images,
&c.image.as_deref().map(|i| vec![i]).unwrap_or_default(),
)
})
.collect::<Vec<_>>();
containers.sort_by(|(a_s, a), (b_s, b)| {
a.state
.cmp(&b.state)
.then(a.name.cmp(&b.name))
.then(a_s.cmp(b_s))
.then(a.network_mode.cmp(&b.network_mode))
.then(a.image.cmp(&b.image))
});
if *reverse {
containers.reverse();
}
print_items(containers, *format, *links)?;
Ok(())
}
pub async fn inspect_container(
inspect: &InspectContainer,
) -> anyhow::Result<()> {
let client = super::komodo_client().await?;
let (server_map, mut containers) = tokio::try_join!(
client
.read(ListServers::default())
.map(|res| res.map(|res| res
.into_iter()
.map(|s| (s.id.clone(), s))
.collect::<HashMap<_, _>>())),
client.read(ListAllContainers {
servers: inspect.servers.clone(),
tags: Default::default(),
terms: vec![inspect.container.clone()],
state: Default::default(),
limit: Some(0),
page: 0,
sort_by: ContainerSortBy::Server,
sort_desc: false,
}),
)?;
containers.iter_mut().for_each(|c| {
let Some(server_id) = c.server_id.as_ref() else {
return;
};
let Some(server) = server_map.get(server_id) else {
c.server_id = Some(String::from("Unknown"));
return;
};
c.server_id = Some(server.name.clone());
});
let mut containers = containers
.into_iter()
.map(|c| async move {
client
.read(read::InspectContainer {
container: c.name,
server: c.server_id.context("No server...")?,
})
.await
})
.collect::<FuturesUnordered<_>>()
.try_collect::<Vec<_>>()
.await?;
containers.sort_by(|a, b| a.name.cmp(&b.name));
match containers.len() {
0 => {
println!(
"{}: Did not find any containers matching '{}'",
"INFO".green(),
inspect.container.bold()
);
}
1 => {
println!("{}", serialize_container(inspect, &containers[0])?);
}
_ => {
let containers = containers
.iter()
.map(|c| serialize_container(inspect, c))
.collect::<anyhow::Result<Vec<_>>>()?
.join("\n");
println!("{containers}");
}
}
Ok(())
}
fn serialize_container(
inspect: &InspectContainer,
container: &docker::container::Container,
) -> anyhow::Result<String> {
let res = if inspect.state {
serde_json::to_string_pretty(&container.state)
} else if inspect.mounts {
serde_json::to_string_pretty(&container.mounts)
} else if inspect.host_config {
serde_json::to_string_pretty(&container.host_config)
} else if inspect.config {
serde_json::to_string_pretty(&container.config)
} else if inspect.network_settings {
serde_json::to_string_pretty(&container.network_settings)
} else {
serde_json::to_string_pretty(container)
}
.context("Failed to serialize items to JSON")?;
Ok(res)
}
// (Option<Server Name>, Container)
impl PrintTable for (Option<&'_ str>, ContainerListItem) {
fn header(links: bool) -> &'static [&'static str] {
if links {
&[
"Container",
"State",
"Server",
"Ports",
"Networks",
"Image",
"Link",
]
} else {
&["Container", "State", "Server", "Ports", "Networks", "Image"]
}
}
fn row(self, links: bool) -> Vec<Cell> {
let color = match self.1.state {
ContainerStateStatusEnum::Running => Color::Green,
ContainerStateStatusEnum::Paused => Color::DarkYellow,
ContainerStateStatusEnum::Empty => Color::Grey,
_ => Color::Red,
};
let mut networks = HashSet::new();
if let Some(network) = self.1.network_mode {
networks.insert(network);
}
for network in self.1.networks {
networks.insert(network);
}
let mut networks = networks.into_iter().collect::<Vec<_>>();
networks.sort();
let mut ports = self
.1
.ports
.into_iter()
.flat_map(|p| p.public_port.map(|p| p.to_string()))
.collect::<HashSet<_>>()
.into_iter()
.collect::<Vec<_>>();
ports.sort();
let ports = if ports.is_empty() {
Cell::new("")
} else {
Cell::new(format!(":{}", ports.join(", :")))
};
let image = self.1.image.as_deref().unwrap_or("Unknown");
let mut res = vec![
Cell::new(self.1.name.clone()).add_attribute(Attribute::Bold),
Cell::new(self.1.state.to_string())
.fg(color)
.add_attribute(Attribute::Bold),
Cell::new(self.0.unwrap_or("Unknown")),
ports,
Cell::new(networks.join(", ")),
Cell::new(clamp_sha(image)),
];
if !links {
return res;
}
let link = if let Some(server_id) = self.1.server_id {
format!(
"{}/servers/{server_id}/container/{}",
cli_config().host,
self.1.name
)
} else {
String::new()
};
res.push(Cell::new(link));
res
}
}
+13
View File
@@ -0,0 +1,13 @@
use anyhow::Context as _;
use komodo_client::api::read::GetCoreInfo;
pub async fn handle() -> anyhow::Result<()> {
let client = super::komodo_client().await?;
let info = client.read(GetCoreInfo {}).await?;
println!(
"{}",
serde_json::to_string_pretty(&info)
.context("Failed to serialize core info to JSON")?
);
Ok(())
}
+101
View File
@@ -0,0 +1,101 @@
use anyhow::Context as _;
use database::bson::doc;
use komodo_client::{
api::read::FindUser,
entities::{
api_key::ApiKey, config::cli::args::create::CreateApiKey,
komodo_timestamp, random_string,
},
};
use serde_json::json;
use crate::config::cli_config;
pub async fn create(
CreateApiKey {
name,
for_user,
expires,
use_api,
}: &CreateApiKey,
) -> anyhow::Result<()> {
let expires = if let Some(expires_days) = expires {
// now + expires in ms
komodo_timestamp() + expires_days * 24 * 60 * 60 * 1000
} else {
0
};
if *use_api {
// USE API
let client = crate::command::komodo_client().await?;
let keys = if let Some(username) = for_user {
// For service user
let user = client
.read(FindUser {
user: username.to_string(),
})
.await?;
client
.write(
komodo_client::api::write::CreateApiKeyForServiceUser {
user_id: user.id,
name: name.clone().unwrap_or_default(),
expires,
},
)
.await?
} else {
// For self
client
.auth_manage(komodo_client::api::auth::manage::CreateApiKey {
name: name.clone().unwrap_or_default(),
expires: expires as u64,
})
.await?
};
println!(
"{}",
serde_json::to_string_pretty(&keys)
.context("Failed to serialize api keys to JSON")?
);
} else {
// USE DATABASE
let db = database::Client::new(&cli_config().database).await?;
let user = db
.users
.find_one(doc! { "username": for_user })
.await
.context("Failed to query database for user")?
.context("No user found with given username")?;
let key = format!("K_{}_K", random_string(40));
let secret = format!("S_{}_S", random_string(40));
let hashed_secret = bcrypt::hash(&secret, 10)
.context("Failed at hashing secret string")?;
db.api_keys
.insert_one(&ApiKey {
name: name.clone().unwrap_or_default(),
user_id: user.id,
key: key.clone(),
secret: hashed_secret.clone(),
created_at: komodo_timestamp(),
expires,
})
.await?;
println!(
"{}",
serde_json::to_string_pretty(
&json!({ "key": key, "secret": secret })
)
.context("Failed to serialize api keys to JSON")?
);
}
Ok(())
}
+13
View File
@@ -0,0 +1,13 @@
use komodo_client::entities::config::cli::args::create::CreateCommand;
mod api_key;
mod onboarding_key;
pub async fn handle(command: &CreateCommand) -> anyhow::Result<()> {
match command {
CreateCommand::ApiKey(api_key) => api_key::create(api_key).await,
CreateCommand::OnboardingKey(onboarding_key) => {
onboarding_key::create(onboarding_key).await
}
}
}
@@ -0,0 +1,46 @@
use anyhow::Context as _;
use komodo_client::entities::{
config::cli::args::create::CreateOnboardingKey, komodo_timestamp,
};
pub async fn create(
CreateOnboardingKey {
name,
expires,
private_key,
tags,
privileged,
copy_server,
create_builder,
}: &CreateOnboardingKey,
) -> anyhow::Result<()> {
let expires = if let Some(expires_days) = expires {
// now + expires in ms
komodo_timestamp() + expires_days * 24 * 60 * 60 * 1000
} else {
0
};
// USE API
let client = crate::command::komodo_client().await?;
let key = client
.write(komodo_client::api::write::CreateOnboardingKey {
name: name.clone().unwrap_or_default(),
expires,
private_key: private_key.clone(),
tags: tags.clone(),
privileged: *privileged,
copy_server: copy_server.clone().unwrap_or_default(),
create_builder: *create_builder,
})
.await?;
println!(
"{}",
serde_json::to_string_pretty(&key)
.context("Failed to serialize onboarding key to JSON")?
);
Ok(())
}
+371
View File
@@ -0,0 +1,371 @@
use std::path::Path;
use anyhow::Context;
use colored::Colorize;
use database::mungos::mongodb::bson::{Document, doc};
use komodo_client::entities::{
config::cli::args::database::DatabaseCommand, optional_string,
};
use crate::{command::sanitize_uri, config::cli_config};
pub async fn handle(command: &DatabaseCommand) -> anyhow::Result<()> {
match command {
DatabaseCommand::Backup { yes, .. } => backup(*yes).await,
DatabaseCommand::Restore {
restore_folder,
index,
yes,
..
} => restore(restore_folder.as_deref(), *index, *yes).await,
DatabaseCommand::Prune { yes, .. } => prune(*yes).await,
DatabaseCommand::Copy { yes, index, .. } => {
copy(*index, *yes).await
}
DatabaseCommand::V1Downgrade { yes } => v1_downgrade(*yes).await,
}
}
async fn backup(yes: bool) -> anyhow::Result<()> {
let config = cli_config();
println!(
"\n🦎 {} Database {} Utility 🦎",
"Komodo".bold(),
"Backup".green().bold()
);
println!(
"\n{}\n",
" - Backup all database contents to gzip compressed files."
.dimmed()
);
if let Some(uri) = optional_string(&config.database.uri) {
println!("{}: {}", " - Source URI".dimmed(), sanitize_uri(&uri));
}
if let Some(address) = optional_string(&config.database.address) {
println!("{}: {address}", " - Source Address".dimmed());
}
if let Some(username) = optional_string(&config.database.username) {
println!("{}: {username}", " - Source Username".dimmed());
}
println!(
"{}: {}\n",
" - Source Db Name".dimmed(),
config.database.db_name,
);
println!(
"{}: {:?}",
" - Backups Folder".dimmed(),
config.backups_folder
);
if config.max_backups == 0 {
println!(
"{}{}",
" - Backup pruning".dimmed(),
"disabled".red().dimmed()
);
} else {
println!("{}: {}", " - Max Backups".dimmed(), config.max_backups);
}
crate::command::wait_for_enter("start backup", yes)?;
let db = database::init(&config.database).await?;
database::utils::backup(&db, &config.backups_folder).await?;
// Early return if backup pruning disabled
if config.max_backups == 0 {
return Ok(());
}
// Know that new backup was taken successfully at this point,
// safe to prune old backup folders
prune_inner().await
}
async fn restore(
restore_folder: Option<&Path>,
index: bool,
yes: bool,
) -> anyhow::Result<()> {
let config = cli_config();
println!(
"\n🦎 {} Database {} Utility 🦎",
"Komodo".bold(),
"Restore".purple().bold()
);
println!(
"\n{}\n",
" - Restores database contents from gzip compressed files."
.dimmed()
);
if let Some(uri) = optional_string(&config.database_target.uri) {
println!("{}: {}", " - Target URI".dimmed(), sanitize_uri(&uri));
}
if let Some(address) =
optional_string(&config.database_target.address)
{
println!("{}: {address}", " - Target Address".dimmed());
}
if let Some(username) =
optional_string(&config.database_target.username)
{
println!("{}: {username}", " - Target Username".dimmed());
}
println!(
"{}: {}",
" - Target Db Name".dimmed(),
config.database_target.db_name,
);
if !index {
println!(
"{}: {}",
" - Target Db Indexing".dimmed(),
"DISABLED".red(),
);
}
println!(
"\n{}: {:?}",
" - Backups Folder".dimmed(),
config.backups_folder
);
if let Some(restore_folder) = restore_folder {
println!("{}: {restore_folder:?}", " - Restore Folder".dimmed());
}
crate::command::wait_for_enter("start restore", yes)?;
let db = if index {
database::Client::new(&config.database_target).await?.db
} else {
database::init(&config.database_target).await?
};
database::utils::restore(
&db,
&config.backups_folder,
restore_folder,
)
.await
}
async fn prune(yes: bool) -> anyhow::Result<()> {
let config = cli_config();
println!(
"\n🦎 {} Database {} Utility 🦎",
"Komodo".bold(),
"Backup Prune".cyan().bold()
);
println!(
"\n{}\n",
" - Prunes database backup folders when greater than the configured amount."
.dimmed()
);
println!(
"{}: {:?}",
" - Backups Folder".dimmed(),
config.backups_folder
);
if config.max_backups == 0 {
println!(
"{}{}",
" - Backup pruning".dimmed(),
"disabled".red().dimmed()
);
} else {
println!("{}: {}", " - Max Backups".dimmed(), config.max_backups);
}
// Early return if backup pruning disabled
if config.max_backups == 0 {
info!(
"Backup pruning is disabled, enabled using 'max_backups' (KOMODO_CLI_MAX_BACKUPS)"
);
return Ok(());
}
crate::command::wait_for_enter("start backup prune", yes)?;
prune_inner().await
}
async fn prune_inner() -> anyhow::Result<()> {
let config = cli_config();
let mut backups_dir =
match tokio::fs::read_dir(&config.backups_folder)
.await
.context("Failed to read backups folder for prune")
{
Ok(backups_dir) => backups_dir,
Err(e) => {
warn!("{e:#}");
return Ok(());
}
};
let mut backup_folders = Vec::new();
loop {
match backups_dir.next_entry().await {
Ok(Some(entry)) => {
let Ok(metadata) = entry.metadata().await else {
continue;
};
if metadata.is_dir() {
backup_folders.push(entry.path());
}
}
Ok(None) => break,
Err(_) => {
continue;
}
}
}
// Ordered from oldest -> newest
backup_folders.sort();
let max_backups = config.max_backups as usize;
let backup_folders_len = backup_folders.len();
// Early return if under the backup count threshold
if backup_folders_len <= max_backups {
info!("No backups to prune");
return Ok(());
}
let to_delete =
&backup_folders[..(backup_folders_len - max_backups)];
info!("Pruning old backups: {to_delete:?}");
for path in to_delete {
if let Err(e) =
tokio::fs::remove_dir_all(path).await.with_context(|| {
format!("Failed to delete backup folder at {path:?}")
})
{
warn!("{e:#}");
}
}
Ok(())
}
async fn copy(index: bool, yes: bool) -> anyhow::Result<()> {
let config = cli_config();
println!(
"\n🦎 {} Database {} Utility 🦎",
"Komodo".bold(),
"Copy".blue().bold()
);
println!(
"\n{}\n",
" - Copies database contents to another database.".dimmed()
);
if let Some(uri) = optional_string(&config.database.uri) {
println!("{}: {}", " - Source URI".dimmed(), sanitize_uri(&uri));
}
if let Some(address) = optional_string(&config.database.address) {
println!("{}: {address}", " - Source Address".dimmed());
}
if let Some(username) = optional_string(&config.database.username) {
println!("{}: {username}", " - Source Username".dimmed());
}
println!(
"{}: {}\n",
" - Source Db Name".dimmed(),
config.database.db_name,
);
if let Some(uri) = optional_string(&config.database_target.uri) {
println!("{}: {}", " - Target URI".dimmed(), sanitize_uri(&uri));
}
if let Some(address) =
optional_string(&config.database_target.address)
{
println!("{}: {address}", " - Target Address".dimmed());
}
if let Some(username) =
optional_string(&config.database_target.username)
{
println!("{}: {username}", " - Target Username".dimmed());
}
println!(
"{}: {}",
" - Target Db Name".dimmed(),
config.database_target.db_name,
);
if !index {
println!(
"{}: {}",
" - Target Db Indexing".dimmed(),
"DISABLED".red(),
);
}
crate::command::wait_for_enter("start copy", yes)?;
let source_db = database::init(&config.database).await?;
let target_db = if index {
database::Client::new(&config.database_target).await?.db
} else {
database::init(&config.database_target).await?
};
database::utils::copy(&source_db, &target_db).await
}
async fn v1_downgrade(yes: bool) -> anyhow::Result<()> {
let config = cli_config();
println!(
"\n🦎 {} Database {} 🦎",
"Komodo".bold(),
"V1 Downgrade".purple().bold()
);
println!(
"\n{}\n",
" - Downgrade the database to V1 compatible data structures."
.dimmed()
);
if let Some(uri) = optional_string(&config.database.uri) {
println!("{}: {}", " - URI".dimmed(), sanitize_uri(&uri));
}
if let Some(address) = optional_string(&config.database.address) {
println!("{}: {address}", " - Address".dimmed());
}
if let Some(username) = optional_string(&config.database.username) {
println!("{}: {username}", " - Username".dimmed());
}
println!(
"{}: {}\n",
" - Db Name".dimmed(),
config.database.db_name,
);
crate::command::wait_for_enter("run downgrade", yes)?;
let db = database::init(&config.database).await?;
db.collection::<Document>("Server")
.update_many(doc! {}, doc! { "$set": { "info": null } })
.await
.context("Failed to downgrade Server schema")?;
db.collection::<Document>("Deployment")
.update_many(doc! {}, doc! { "$set": { "info": null } })
.await
.context("Failed to downgrade Deployment schema")?;
info!(
"V1 Downgrade complete. Ready to downgrade to komodo-core:1 ✅"
);
Ok(())
}
+232
View File
@@ -0,0 +1,232 @@
use std::time::Duration;
use colored::Colorize;
use futures_util::{StreamExt, stream::FuturesUnordered};
use komodo_client::{
api::execute::{
BatchExecutionResponse, BatchExecutionResponseItem, Execution,
},
entities::{resource_link, update::Update},
};
use crate::config::cli_config;
enum ExecutionResult {
Single(Box<Update>),
Batch(BatchExecutionResponse),
}
pub async fn handle(
execution: &Execution,
yes: bool,
) -> anyhow::Result<()> {
if matches!(execution, Execution::None(_)) {
println!("Got 'none' execution. Doing nothing...");
tokio::time::sleep(Duration::from_secs(3)).await;
println!("Finished doing nothing. Exiting...");
std::process::exit(0);
}
println!("\n{}: Execution", "Mode".dimmed());
macro_rules! handle_execution {
(
execute: [$($ExecVariant:ident),* $(,)?],
batch: [$($BatchVariant:ident),* $(,)?],
) => {{
// Print data
match execution {
$(Execution::$ExecVariant(data) => println!("{}: {data:?}", "Data".dimmed()),)*
$(Execution::$BatchVariant(data) => println!("{}: {data:?}", "Data".dimmed()),)*
Execution::CommitSync(data) => println!("{}: {data:?}", "Data".dimmed()),
Execution::Sleep(data) => println!("{}: {data:?}", "Data".dimmed()),
Execution::None(data) => println!("{}: {data:?}", "Data".dimmed()),
}
$crate::command::wait_for_enter("run execution", yes)?;
info!("Running Execution...");
let client = $crate::command::komodo_client().await?;
// Execute and get result
match execution.clone() {
$(
Execution::$ExecVariant(request) => client
.execute(request)
.await
.map(|u| ExecutionResult::Single(u.into())),
)*
$(
Execution::$BatchVariant(request) => {
client.execute(request).await.map(ExecutionResult::Batch)
}
)*
Execution::CommitSync(request) => client
.write(request)
.await
.map(|u| ExecutionResult::Single(u.into())),
Execution::Sleep(request) => {
let duration =
Duration::from_millis(request.duration_ms as u64);
tokio::time::sleep(duration).await;
println!("Finished sleeping!");
std::process::exit(0)
}
Execution::None(_) => unreachable!(),
}
}};
}
let res = handle_execution!(
execute: [
RunAction,
CancelAction,
RunProcedure,
CancelProcedure,
RunBuild,
CancelBuild,
Deploy,
PullDeployment,
StartDeployment,
RestartDeployment,
PauseDeployment,
UnpauseDeployment,
StopDeployment,
DestroyDeployment,
CloneRepo,
PullRepo,
BuildRepo,
CancelRepoBuild,
StartContainer,
RestartContainer,
PauseContainer,
UnpauseContainer,
StopContainer,
DestroyContainer,
StartAllContainers,
RestartAllContainers,
PauseAllContainers,
UnpauseAllContainers,
StopAllContainers,
PruneContainers,
DeleteNetwork,
PruneNetworks,
DeleteImage,
PruneImages,
DeleteVolume,
PruneVolumes,
PruneDockerBuilders,
PruneBuildx,
PruneSystem,
RunSync,
DeployStack,
DeployStackIfChanged,
PullStack,
StartStack,
RestartStack,
PauseStack,
UnpauseStack,
StopStack,
DestroyStack,
RunStackService,
TestAlerter,
SendAlert,
RemoveSwarmNodes,
UpdateSwarmNode,
RemoveSwarmStacks,
RemoveSwarmServices,
CreateSwarmConfig,
RotateSwarmConfig,
RemoveSwarmConfigs,
CreateSwarmSecret,
RotateSwarmSecret,
RemoveSwarmSecrets,
ClearRepoCache,
BackupCoreDatabase,
GlobalAutoUpdate,
RotateAllServerKeys,
RotateCoreKeys,
],
batch: [
BatchRunAction,
BatchRunProcedure,
BatchRunBuild,
BatchDeploy,
BatchDestroyDeployment,
BatchCloneRepo,
BatchPullRepo,
BatchBuildRepo,
BatchDeployStack,
BatchDeployStackIfChanged,
BatchPullStack,
BatchDestroyStack,
],
);
match res {
Ok(ExecutionResult::Single(update)) => {
poll_update_until_complete(&update).await
}
Ok(ExecutionResult::Batch(updates)) => {
let mut handles = updates
.iter()
.map(|update| async move {
match update {
BatchExecutionResponseItem::Ok(update) => {
poll_update_until_complete(update).await
}
BatchExecutionResponseItem::Err(e) => {
error!("{e:#?}");
Ok(())
}
}
})
.collect::<FuturesUnordered<_>>();
while let Some(res) = handles.next().await {
match res {
Ok(()) => {}
Err(e) => {
error!("{e:#?}");
}
}
}
Ok(())
}
Err(e) => {
error!("{e:#?}");
Ok(())
}
}
}
async fn poll_update_until_complete(
update: &Update,
) -> anyhow::Result<()> {
let link = if update.id.is_empty() {
let (resource_type, id) = update.target.extract_variant_id();
resource_link(&cli_config().host, resource_type, id)
} else {
format!("{}/updates/{}", cli_config().host, update.id)
};
println!("Link: '{}'", link.bold());
let client = super::komodo_client().await?;
let timer = tokio::time::Instant::now();
let update = client.poll_update_until_complete(&update.id).await?;
if update.success {
println!(
"FINISHED in {}: {}",
format!("{:.1?}", timer.elapsed()).bold(),
"EXECUTION SUCCESSFUL".green(),
);
} else {
eprintln!(
"FINISHED in {}: {}",
format!("{:.1?}", timer.elapsed()).bold(),
"EXECUTION FAILED".red(),
);
}
Ok(())
}
File diff suppressed because it is too large Load Diff
+184
View File
@@ -0,0 +1,184 @@
use std::io::Read;
use anyhow::{Context, anyhow};
use chrono::TimeZone;
use colored::Colorize;
use comfy_table::{Attribute, Cell, Table};
use komodo_client::{
KomodoClient,
entities::config::cli::{CliTableBorders, args::CliFormat},
};
use serde::Serialize;
use tokio::sync::OnceCell;
use wildcard::Wildcard;
use crate::config::cli_config;
pub mod container;
pub mod core_info;
pub mod create;
pub mod database;
pub mod execute;
pub mod list;
pub mod terminal;
pub mod update;
async fn komodo_client() -> anyhow::Result<&'static KomodoClient> {
static KOMODO_CLIENT: OnceCell<KomodoClient> =
OnceCell::const_new();
KOMODO_CLIENT
.get_or_try_init(|| async {
let config = cli_config();
let (Some(key), Some(secret)) =
(&config.cli_key, &config.cli_secret)
else {
return Err(anyhow!(
"Must provide both cli_key and cli_secret"
));
};
KomodoClient::new(&config.host, key, secret)
.with_healthcheck()
.await
})
.await
}
fn wait_for_enter(
press_enter_to: &str,
skip: bool,
) -> anyhow::Result<()> {
if skip {
println!();
return Ok(());
}
println!(
"\nPress {} to {}\n",
"ENTER".green(),
press_enter_to.bold()
);
let buffer = &mut [0u8];
std::io::stdin()
.read_exact(buffer)
.context("failed to read ENTER")?;
Ok(())
}
/// Sanitizes uris of the form:
/// `protocol://username:password@address`
fn sanitize_uri(uri: &str) -> String {
// protocol: `mongodb`
// credentials_address: `username:password@address`
let Some((protocol, credentials_address)) = uri.split_once("://")
else {
// If no protocol, return as-is
return uri.to_string();
};
// credentials: `username:password`
let Some((credentials, address)) =
credentials_address.split_once('@')
else {
// If no credentials, return as-is
return uri.to_string();
};
match credentials.split_once(':') {
Some((username, _)) => {
format!("{protocol}://{username}:*****@{address}")
}
None => {
format!("{protocol}://*****@{address}")
}
}
}
fn print_items<T: PrintTable + Serialize>(
items: Vec<T>,
format: CliFormat,
links: bool,
) -> anyhow::Result<()> {
match format {
CliFormat::Table => {
let mut table = Table::new();
let preset = {
use comfy_table::presets::*;
match cli_config().table_borders {
None | Some(CliTableBorders::Horizontal) => {
UTF8_HORIZONTAL_ONLY
}
Some(CliTableBorders::Vertical) => UTF8_FULL_CONDENSED,
Some(CliTableBorders::Inside) => UTF8_NO_BORDERS,
Some(CliTableBorders::Outside) => UTF8_BORDERS_ONLY,
Some(CliTableBorders::All) => UTF8_FULL,
}
};
table.load_preset(preset).set_header(
T::header(links)
.iter()
.map(|h| Cell::new(h).add_attribute(Attribute::Bold)),
);
for item in items {
table.add_row(item.row(links));
}
println!("{table}");
}
CliFormat::Json => {
println!(
"{}",
serde_json::to_string_pretty(&items)
.context("Failed to serialize items to JSON")?
);
}
}
Ok(())
}
trait PrintTable {
fn header(links: bool) -> &'static [&'static str];
fn row(self, links: bool) -> Vec<Cell>;
}
fn parse_wildcards(items: &[String]) -> Vec<Wildcard<'_>> {
items
.iter()
.flat_map(|i| {
Wildcard::new(i.as_bytes()).inspect_err(|e| {
warn!("Failed to parse wildcard: {i} | {e:?}")
})
})
.collect::<Vec<_>>()
}
fn matches_wildcards(
wildcards: &[Wildcard<'_>],
items: &[&str],
) -> bool {
if wildcards.is_empty() {
return true;
}
items.iter().any(|item| {
wildcards.iter().any(|wc| wc.is_match(item.as_bytes()))
})
}
fn format_timetamp(ts: i64) -> anyhow::Result<String> {
let ts = chrono::Local
.timestamp_millis_opt(ts)
.single()
.context("Invalid ts")?
.format("%m/%d %H:%M:%S")
.to_string();
Ok(ts)
}
fn clamp_sha(maybe_sha: &str) -> String {
if maybe_sha.starts_with("sha256:") {
maybe_sha[0..20].to_string() + "..."
} else {
maybe_sha.to_string()
}
}
// fn text_link(link: &str, text: &str) -> String {
// format!("\x1b]8;;{link}\x07{text}\x1b]8;;\x07")
// }
+389
View File
@@ -0,0 +1,389 @@
use anyhow::{Context, anyhow};
use colored::Colorize;
use komodo_client::{
api::{
read::{GetServer, ListAllContainers, ListServers},
terminal::InitTerminal,
},
entities::{
config::cli::args::terminal::{Attach, Connect, Exec},
server::ServerQuery,
terminal::{
ContainerTerminalMode, TerminalRecreateMode,
TerminalResizeMessage, TerminalStdinMessage,
},
},
ws::terminal::TerminalWebsocket,
};
use tokio::io::{AsyncReadExt as _, AsyncWriteExt as _};
use tokio_util::sync::CancellationToken;
pub async fn handle_connect(
Connect {
server,
name,
command,
recreate,
}: &Connect,
) -> anyhow::Result<()> {
handle_terminal_forwarding(server, async {
super::komodo_client()
.await?
.connect_server_terminal(
server.to_string(),
Some(name.to_string()),
Some(InitTerminal {
command: command.clone(),
recreate: if *recreate {
TerminalRecreateMode::Always
} else {
TerminalRecreateMode::DifferentCommand
},
mode: None,
}),
)
.await
})
.await
}
pub async fn handle_exec(
Exec {
server,
container,
shell,
recreate,
}: &Exec,
) -> anyhow::Result<()> {
let server = get_server(server.clone(), container).await?;
handle_terminal_forwarding(
&format!("{server}/{container}"),
async {
super::komodo_client()
.await?
.connect_container_terminal(
server,
container.to_string(),
None,
Some(InitTerminal {
command: Some(shell.to_string()),
recreate: if *recreate {
TerminalRecreateMode::Always
} else {
TerminalRecreateMode::DifferentCommand
},
mode: Some(ContainerTerminalMode::Exec),
}),
)
.await
},
)
.await
}
pub async fn handle_attach(
Attach {
server,
container,
recreate,
}: &Attach,
) -> anyhow::Result<()> {
let server = get_server(server.clone(), container).await?;
handle_terminal_forwarding(
&format!("{server}/{container}-attach"),
async {
super::komodo_client()
.await?
.connect_container_terminal(
server,
container.to_string(),
None,
Some(InitTerminal {
command: None,
recreate: if *recreate {
TerminalRecreateMode::Always
} else {
TerminalRecreateMode::DifferentCommand
},
mode: Some(ContainerTerminalMode::Attach),
}),
)
.await
},
)
.await
}
async fn get_server(
server: Option<String>,
container: &str,
) -> anyhow::Result<String> {
// Don't need to find server for terminal,
// user provided it, early return.
if let Some(server) = server {
return Ok(server);
}
let client = super::komodo_client().await?;
let mut containers = client
.read(ListAllContainers {
servers: Default::default(),
tags: Default::default(),
terms: vec![container.to_string()],
state: Default::default(),
limit: Some(0),
page: 0,
sort_by: Default::default(),
sort_desc: false,
})
.await?;
if containers.is_empty() {
return Err(anyhow!(
"Did not find any container matching {container}"
));
}
if containers.len() == 1 {
let server_id = containers
.pop()
.context("Shouldn't happen")?
.server_id
.context("Container doesn't have server_id")?;
let server_name =
client.read(GetServer { server: server_id }).await?.name;
return Ok(server_name);
}
let servers = containers
.into_iter()
.flat_map(|container| container.server_id)
.collect::<Vec<_>>();
let servers = client
.read(ListServers {
query: ServerQuery::builder().names(servers).build(),
limit: Some(0),
..Default::default()
})
.await?
.into_iter()
.map(|server| format!("\t- {}", server.name.bold()))
.collect::<Vec<_>>()
.join("\n");
Err(anyhow!(
"Multiple containers matching '{}' on Servers:\n{servers}",
container.bold(),
))
}
async fn handle_terminal_forwarding<
C: Future<Output = anyhow::Result<TerminalWebsocket>>,
>(
label: &str,
connect: C,
) -> anyhow::Result<()> {
// Need to forward multiple sources into ws write
let (write_tx, mut write_rx) =
tokio::sync::mpsc::channel::<TerminalStdinMessage>(1024);
// ================
// SETUP RESIZING
// ================
// Subscribe to SIGWINCH for resize messages
let mut sigwinch = tokio::signal::unix::signal(
tokio::signal::unix::SignalKind::window_change(),
)
.context("failed to register SIGWINCH handler")?;
// Send first resize messsage, bailing if it fails to get the size.
write_tx.send(resize_message()?).await?;
let cancel = CancellationToken::new();
let forward_resize = async {
while future_or_cancel(sigwinch.recv(), &cancel)
.await
.flatten()
.is_some()
{
if let Ok(resize_message) = resize_message()
&& write_tx.send(resize_message).await.is_err()
{
break;
}
}
cancel.cancel();
};
let forward_stdin = async {
let mut stdin = tokio::io::stdin();
let mut buf = [0u8; 8192];
while let Some(Ok(n)) =
future_or_cancel(stdin.read(&mut buf), &cancel).await
{
// EOF
if n == 0 {
break;
}
let bytes = &buf[..n];
// Check for disconnect sequence (alt + q)
if bytes == [197, 147] {
break;
}
// Forward bytes
if write_tx
.send(TerminalStdinMessage::Forward(bytes.to_vec()))
.await
.is_err()
{
break;
};
}
cancel.cancel();
};
// =====================
// CONNECT AND FORWARD
// =====================
let (mut ws_write, mut ws_read) = connect.await?.split();
let forward_write = async {
while let Some(message) =
future_or_cancel(write_rx.recv(), &cancel).await.flatten()
{
if let Err(e) = ws_write.send_stdin_message(message).await {
cancel.cancel();
return Some(e);
};
}
cancel.cancel();
None
};
let forward_read = async {
let mut stdout = tokio::io::stdout();
// Write connection message
if let Err(e) = write_connection_message(&mut stdout, label)
.await
.context("Failed to write text to stdout")
{
cancel.cancel();
return Some(e);
}
while let Some(msg) =
future_or_cancel(ws_read.receive_stdout(), &cancel).await
{
let bytes = match msg {
Ok(Some(bytes)) => bytes,
Ok(None) => break,
Err(e) => {
cancel.cancel();
return Some(e.context("Websocket read error"));
}
};
if let Err(e) = stdout
.write_all(&bytes)
.await
.context("Failed to write text to stdout")
{
cancel.cancel();
return Some(e);
}
let _ = stdout.flush().await;
}
cancel.cancel();
None
};
let guard = RawModeGuard::enable_raw_mode()?;
let (_, _, write_error, read_error) = tokio::join!(
forward_resize,
forward_stdin,
forward_write,
forward_read
);
drop(guard);
if let Some(e) = write_error {
eprintln!("\nFailed to forward stdin | {e:#}");
}
if let Some(e) = read_error {
eprintln!("\nFailed to forward stdout | {e:#}");
}
println!("\n\n{} {}", "connection".bold(), "closed".red().bold());
// It doesn't seem to exit by itself after the raw mode stuff.
std::process::exit(0)
}
async fn write_connection_message(
stdout: &mut tokio::io::Stdout,
label: &str,
) -> anyhow::Result<()> {
// Use message without ansi for correct length
let message_clean = format!("# Connected to {label} (km) #");
let bounder = "=".repeat(message_clean.chars().count());
let message = format!(
"# {} to {} {} #",
"Connected".green().bold(),
label.bold(),
"(km)".dimmed()
);
stdout
.write_all(
format!("\n{bounder}\r\n{message}\r\n{bounder}\r\n").as_bytes(),
)
.await?;
let _ = stdout.flush().await;
Ok(())
}
fn resize_message() -> anyhow::Result<TerminalStdinMessage> {
let (cols, rows) = crossterm::terminal::size()
.context("Failed to get terminal size")?;
Ok(TerminalStdinMessage::Resize(TerminalResizeMessage {
rows,
cols,
}))
}
struct RawModeGuard;
impl RawModeGuard {
fn enable_raw_mode() -> anyhow::Result<Self> {
crossterm::terminal::enable_raw_mode()
.context("Failed to enable terminal raw mode")?;
Ok(Self)
}
}
impl Drop for RawModeGuard {
fn drop(&mut self) {
if let Err(e) = crossterm::terminal::disable_raw_mode() {
eprintln!("Failed to disable terminal raw mode | {e:?}");
}
}
}
async fn future_or_cancel<T, F: Future<Output = T>>(
fut: F,
cancel: &CancellationToken,
) -> Option<T> {
tokio::select! {
res = fut => Some(res),
_ = cancel.cancelled() => None
}
}
+43
View File
@@ -0,0 +1,43 @@
use komodo_client::entities::{
build::PartialBuildConfig,
config::cli::args::update::UpdateCommand,
deployment::PartialDeploymentConfig, repo::PartialRepoConfig,
server::PartialServerConfig, stack::PartialStackConfig,
sync::PartialResourceSyncConfig,
};
mod resource;
mod user;
mod variable;
pub async fn handle(command: &UpdateCommand) -> anyhow::Result<()> {
match command {
UpdateCommand::Build(update) => {
resource::update::<PartialBuildConfig>(update).await
}
UpdateCommand::Deployment(update) => {
resource::update::<PartialDeploymentConfig>(update).await
}
UpdateCommand::Repo(update) => {
resource::update::<PartialRepoConfig>(update).await
}
UpdateCommand::Server(update) => {
resource::update::<PartialServerConfig>(update).await
}
UpdateCommand::Stack(update) => {
resource::update::<PartialStackConfig>(update).await
}
UpdateCommand::Sync(update) => {
resource::update::<PartialResourceSyncConfig>(update).await
}
UpdateCommand::Variable {
name,
value,
secret,
yes,
} => variable::update(name, value, *secret, *yes).await,
UpdateCommand::User { username, command } => {
user::update(username, command).await
}
}
}
+152
View File
@@ -0,0 +1,152 @@
use anyhow::Context;
use colored::Colorize;
use komodo_client::{
api::write::{
UpdateBuild, UpdateDeployment, UpdateRepo, UpdateResourceSync,
UpdateServer, UpdateStack,
},
entities::{
build::PartialBuildConfig,
config::cli::args::update::UpdateResource,
deployment::PartialDeploymentConfig, repo::PartialRepoConfig,
server::PartialServerConfig, stack::PartialStackConfig,
sync::PartialResourceSyncConfig,
},
};
use serde::{Serialize, de::DeserializeOwned};
pub async fn update<
T: std::fmt::Debug + Serialize + DeserializeOwned + ResourceUpdate,
>(
UpdateResource {
resource,
update,
yes,
}: &UpdateResource,
) -> anyhow::Result<()> {
println!("\n{}: Update {}\n", "Mode".dimmed(), T::resource_type());
println!(" - {}: {resource}", "Name".dimmed());
let config = serde_qs::from_str::<T>(update)
.context("Failed to deserialize config")?;
match serde_json::to_string_pretty(&config) {
Ok(config) => {
println!(" - {}: {config}", "Update".dimmed());
}
Err(_) => {
println!(" - {}: {config:#?}", "Update".dimmed());
}
}
crate::command::wait_for_enter("update resource", *yes)?;
config.apply(resource).await
}
pub trait ResourceUpdate {
fn resource_type() -> &'static str;
async fn apply(self, resource: &str) -> anyhow::Result<()>;
}
impl ResourceUpdate for PartialBuildConfig {
fn resource_type() -> &'static str {
"Build"
}
async fn apply(self, resource: &str) -> anyhow::Result<()> {
let client = crate::command::komodo_client().await?;
client
.write(UpdateBuild {
id: resource.to_string(),
config: self,
})
.await
.context("Failed to update build config")?;
Ok(())
}
}
impl ResourceUpdate for PartialDeploymentConfig {
fn resource_type() -> &'static str {
"Deployment"
}
async fn apply(self, resource: &str) -> anyhow::Result<()> {
let client = crate::command::komodo_client().await?;
client
.write(UpdateDeployment {
id: resource.to_string(),
config: self,
})
.await
.context("Failed to update deployment config")?;
Ok(())
}
}
impl ResourceUpdate for PartialRepoConfig {
fn resource_type() -> &'static str {
"Repo"
}
async fn apply(self, resource: &str) -> anyhow::Result<()> {
let client = crate::command::komodo_client().await?;
client
.write(UpdateRepo {
id: resource.to_string(),
config: self,
})
.await
.context("Failed to update repo config")?;
Ok(())
}
}
impl ResourceUpdate for PartialServerConfig {
fn resource_type() -> &'static str {
"Server"
}
async fn apply(self, resource: &str) -> anyhow::Result<()> {
let client = crate::command::komodo_client().await?;
client
.write(UpdateServer {
id: resource.to_string(),
config: self,
})
.await
.context("Failed to update server config")?;
Ok(())
}
}
impl ResourceUpdate for PartialStackConfig {
fn resource_type() -> &'static str {
"Stack"
}
async fn apply(self, resource: &str) -> anyhow::Result<()> {
let client = crate::command::komodo_client().await?;
client
.write(UpdateStack {
id: resource.to_string(),
config: self,
})
.await
.context("Failed to update stack config")?;
Ok(())
}
}
impl ResourceUpdate for PartialResourceSyncConfig {
fn resource_type() -> &'static str {
"Sync"
}
async fn apply(self, resource: &str) -> anyhow::Result<()> {
let client = crate::command::komodo_client().await?;
client
.write(UpdateResourceSync {
id: resource.to_string(),
config: self,
})
.await
.context("Failed to update sync config")?;
Ok(())
}
}
+142
View File
@@ -0,0 +1,142 @@
use anyhow::Context;
use colored::Colorize;
use database::mungos::mongodb::bson::doc;
use komodo_client::entities::{
config::{
cli::args::{CliEnabled, update::UpdateUserCommand},
empty_or_redacted,
},
optional_string,
};
use crate::{command::sanitize_uri, config::cli_config};
pub async fn update(
username: &str,
command: &UpdateUserCommand,
) -> anyhow::Result<()> {
match command {
UpdateUserCommand::Password {
password,
unsanitized,
yes,
} => {
update_password(username, password, *unsanitized, *yes).await
}
UpdateUserCommand::SuperAdmin { enabled, yes } => {
update_super_admin(username, *enabled, *yes).await
}
UpdateUserCommand::Clear2fa { yes } => {
clear_2fa(username, *yes).await
}
}
}
async fn update_password(
username: &str,
password: &str,
unsanitized: bool,
yes: bool,
) -> anyhow::Result<()> {
println!("\n{}: Update Password\n", "Mode".dimmed());
println!(" - {}: {username}", "Username".dimmed());
if unsanitized {
println!(" - {}: {password}", "Password".dimmed());
} else {
println!(
" - {}: {}",
"Password".dimmed(),
empty_or_redacted(password)
);
}
crate::command::wait_for_enter("update password", yes)?;
info!("Updating password...");
let db = database::Client::new(&cli_config().database).await?;
let user = db
.users
.find_one(doc! { "username": username })
.await
.context("Failed to query database for user")?
.context("No user found with given username")?;
db.set_user_password(&user, password).await?;
info!("Password updated ✅");
Ok(())
}
async fn update_super_admin(
username: &str,
super_admin: CliEnabled,
yes: bool,
) -> anyhow::Result<()> {
let config = cli_config();
println!("\n{}: Update Super Admin\n", "Mode".dimmed());
println!(" - {}: {username}", "Username".dimmed());
println!(" - {}: {super_admin}\n", "Super Admin".dimmed());
if let Some(uri) = optional_string(&config.database.uri) {
println!("{}: {}", " - Source URI".dimmed(), sanitize_uri(&uri));
}
if let Some(address) = optional_string(&config.database.address) {
println!("{}: {address}", " - Source Address".dimmed());
}
if let Some(username) = optional_string(&config.database.username) {
println!("{}: {username}", " - Source Username".dimmed());
}
println!(
"{}: {}",
" - Source Db Name".dimmed(),
config.database.db_name,
);
crate::command::wait_for_enter("update super admin", yes)?;
info!("Updating super admin...");
let db = database::Client::new(&config.database).await?;
// Make sure the user exists first before saying it is successful.
let user = db
.users
.find_one(doc! { "username": username })
.await
.context("Failed to query database for user")?
.context("No user found with given username")?;
let super_admin: bool = super_admin.into();
db.users
.update_one(
doc! { "username": user.username },
doc! { "$set": { "super_admin": super_admin } },
)
.await
.context("Failed to update user super admin on db")?;
info!("Super admin updated ✅");
Ok(())
}
async fn clear_2fa(username: &str, yes: bool) -> anyhow::Result<()> {
println!("\n{}: Clear 2FA Methods\n", "Mode".dimmed());
println!(" - {}: {username}", "Username".dimmed());
crate::command::wait_for_enter("clear user 2FA methods", yes)?;
info!("Clearing 2FA methods...");
let db = database::Client::new(&cli_config().database).await?;
db.clear_user_2fa_methods(username).await?;
info!("2FA methods cleared ✅");
Ok(())
}
+70
View File
@@ -0,0 +1,70 @@
use anyhow::Context;
use colored::Colorize;
use komodo_client::api::{
read::GetVariable,
write::{
CreateVariable, UpdateVariableIsSecret, UpdateVariableValue,
},
};
pub async fn update(
name: &str,
value: &str,
secret: Option<bool>,
yes: bool,
) -> anyhow::Result<()> {
println!("\n{}: Update Variable\n", "Mode".dimmed());
println!(" - {}: {name}", "Name".dimmed());
println!(" - {}: {value}", "Value".dimmed());
if let Some(secret) = secret {
println!(" - {}: {secret}", "Is Secret".dimmed());
}
crate::command::wait_for_enter("update variable", yes)?;
let client = crate::command::komodo_client().await?;
let Ok(existing) = client
.read(GetVariable {
name: name.to_string(),
})
.await
else {
// Create the variable
client
.write(CreateVariable {
name: name.to_string(),
value: value.to_string(),
is_secret: secret.unwrap_or_default(),
description: Default::default(),
})
.await
.context("Failed to create variable")?;
info!("Variable created ✅");
return Ok(());
};
client
.write(UpdateVariableValue {
name: name.to_string(),
value: value.to_string(),
})
.await
.context("Failed to update variable 'value'")?;
info!("Variable 'value' updated ✅");
let Some(secret) = secret else { return Ok(()) };
if secret != existing.is_secret {
client
.write(UpdateVariableIsSecret {
name: name.to_string(),
is_secret: secret,
})
.await
.context("Failed to update variable 'is_secret'")?;
info!("Variable 'is_secret' updated to {secret} ✅");
}
Ok(())
}
+283
View File
@@ -0,0 +1,283 @@
use std::{path::PathBuf, sync::OnceLock};
use anyhow::Context;
use clap::Parser;
use colored::Colorize;
use komodo_client::entities::{
config::{
DatabaseConfig,
cli::{
CliConfig, Env,
args::{CliArgs, Command, Execute, database::DatabaseCommand},
},
},
logger::LogConfig,
};
use mogh_secret_file::maybe_read_item_from_file;
pub fn cli_args() -> &'static CliArgs {
static CLI_ARGS: OnceLock<CliArgs> = OnceLock::new();
CLI_ARGS.get_or_init(CliArgs::parse)
}
pub fn cli_env() -> &'static Env {
static CLI_ARGS: OnceLock<Env> = OnceLock::new();
CLI_ARGS.get_or_init(|| {
match envy::from_env()
.context("Failed to parse Komodo CLI environment")
{
Ok(env) => env,
Err(e) => {
panic!("{e:?}")
}
}
})
}
pub fn cli_config() -> &'static CliConfig {
static CLI_CONFIG: OnceLock<CliConfig> = OnceLock::new();
CLI_CONFIG.get_or_init(|| {
let args = cli_args();
let env = cli_env().clone();
let config_paths = args
.config_path
.clone()
.unwrap_or(env.komodo_cli_config_paths);
let debug_startup =
args.debug_startup.unwrap_or(env.komodo_cli_debug_startup);
if debug_startup {
println!(
"{}: Komodo CLI version: {}",
"DEBUG".cyan(),
env!("CARGO_PKG_VERSION").blue().bold()
);
println!(
"{}: {}: {config_paths:?}",
"DEBUG".cyan(),
"Config Paths".dimmed(),
);
}
let config_keywords = args
.config_keyword
.clone()
.unwrap_or(env.komodo_cli_config_keywords);
let config_keywords = config_keywords
.iter()
.map(String::as_str)
.collect::<Vec<_>>();
if debug_startup {
println!(
"{}: {}: {config_keywords:?}",
"DEBUG".cyan(),
"Config File Keywords".dimmed(),
);
}
let mut unparsed_config = (mogh_config::ConfigLoader {
paths: &config_paths
.iter()
.map(PathBuf::as_path)
.collect::<Vec<_>>(),
match_wildcards: &config_keywords,
include_file_name: ".kminclude",
merge_nested: env.komodo_cli_merge_nested_config,
extend_array: env.komodo_cli_extend_config_arrays,
debug_print: debug_startup,
})
.load::<serde_json::Map<String, serde_json::Value>>()
.expect("failed at parsing config from paths");
let init_parsed_config = serde_json::from_value::<CliConfig>(
serde_json::Value::Object(unparsed_config.clone()),
)
.context("Failed to parse config")
.unwrap();
let (host, key, secret) = match &args.command {
Command::Execute(Execute {
host, key, secret, ..
}) => (host.clone(), key.clone(), secret.clone()),
_ => (None, None, None),
};
let backups_folder = match &args.command {
Command::Database {
command: DatabaseCommand::Backup { backups_folder, .. },
} => backups_folder.clone(),
Command::Database {
command: DatabaseCommand::Restore { backups_folder, .. },
} => backups_folder.clone(),
_ => None,
};
let (uri, address, username, password, db_name) =
match &args.command {
Command::Database {
command:
DatabaseCommand::Copy {
uri,
address,
username,
password,
db_name,
..
},
} => (
uri.clone(),
address.clone(),
username.clone(),
password.clone(),
db_name.clone(),
),
_ => (None, None, None, None, None),
};
let profile = args
.profile
.as_ref()
.or(init_parsed_config.default_profile.as_ref());
let unparsed_config = if let Some(profile) = profile
&& !profile.is_empty()
{
// Find the profile config,
// then merge it with the Default config.
let serde_json::Value::Array(profiles) = unparsed_config
.remove("profile")
.context("Config has no profiles, but a profile is required")
.unwrap()
else {
panic!("`config.profile` is not array");
};
let Some(profile_config) = profiles.into_iter().find(|p| {
let Ok(parsed) =
serde_json::from_value::<CliConfig>(p.clone())
else {
return false;
};
&parsed.config_profile == profile
|| parsed
.config_aliases
.iter()
.any(|alias| alias == profile)
}) else {
panic!("No profile matching '{profile}' was found.");
};
let serde_json::Value::Object(profile_config) = profile_config
else {
panic!("Profile config is not Object type.");
};
mogh_config::merge_config(
unparsed_config,
profile_config.clone(),
env.komodo_cli_merge_nested_config,
env.komodo_cli_extend_config_arrays,
)
.unwrap_or(profile_config)
} else {
unparsed_config
};
let config = serde_json::from_value::<CliConfig>(
serde_json::Value::Object(unparsed_config),
)
.context("Failed to parse final config")
.unwrap();
let config_profile = if config.config_profile.is_empty() {
String::from("None")
} else {
config.config_profile
};
CliConfig {
config_profile,
config_aliases: config.config_aliases,
default_profile: config.default_profile,
table_borders: env
.komodo_cli_table_borders
.or(config.table_borders),
host: host
.or(env.komodo_cli_host)
.or(env.komodo_host)
.unwrap_or(config.host),
cli_key: key.or(env.komodo_cli_key).or(config.cli_key),
cli_secret: secret
.or(env.komodo_cli_secret)
.or(config.cli_secret),
backups_folder: backups_folder
.or(env.komodo_cli_backups_folder)
.unwrap_or(config.backups_folder),
max_backups: env
.komodo_cli_max_backups
.unwrap_or(config.max_backups),
database_target: DatabaseConfig {
uri: uri
.or(env.komodo_cli_database_target_uri)
.unwrap_or(config.database_target.uri),
address: address
.or(env.komodo_cli_database_target_address)
.unwrap_or(config.database_target.address),
username: username
.or(env.komodo_cli_database_target_username)
.unwrap_or(config.database_target.username),
password: password
.or(env.komodo_cli_database_target_password)
.unwrap_or(config.database_target.password),
db_name: db_name
.or(env.komodo_cli_database_target_db_name)
.unwrap_or(config.database_target.db_name),
app_name: config.database_target.app_name,
},
database: DatabaseConfig {
uri: maybe_read_item_from_file(
env.komodo_database_uri_file,
env.komodo_database_uri,
)
.unwrap_or(config.database.uri),
address: env
.komodo_database_address
.unwrap_or(config.database.address),
username: maybe_read_item_from_file(
env.komodo_database_username_file,
env.komodo_database_username,
)
.unwrap_or(config.database.username),
password: maybe_read_item_from_file(
env.komodo_database_password_file,
env.komodo_database_password,
)
.unwrap_or(config.database.password),
db_name: env
.komodo_database_db_name
.unwrap_or(config.database.db_name),
app_name: config.database.app_name,
},
cli_logging: LogConfig {
level: env
.komodo_cli_logging_level
.unwrap_or(config.cli_logging.level),
stdio: env
.komodo_cli_logging_stdio
.unwrap_or(config.cli_logging.stdio),
pretty: env
.komodo_cli_logging_pretty
.unwrap_or(config.cli_logging.pretty),
location: false,
ansi: env
.komodo_cli_logging_ansi
.unwrap_or(config.cli_logging.ansi),
timestamps: env
.komodo_cli_logging_timestamps
.unwrap_or(config.cli_logging.timestamps),
otlp_endpoint: env
.komodo_cli_logging_otlp_endpoint
.unwrap_or(config.cli_logging.otlp_endpoint),
opentelemetry_service_name: env
.komodo_cli_logging_opentelemetry_service_name
.unwrap_or(config.cli_logging.opentelemetry_service_name),
opentelemetry_scope_name: env
.komodo_cli_logging_opentelemetry_scope_name
.unwrap_or(config.cli_logging.opentelemetry_scope_name),
},
profile: config.profile,
}
})
}
+103
View File
@@ -0,0 +1,103 @@
#[macro_use]
extern crate tracing;
use anyhow::Context;
use colored::Colorize;
use komodo_client::entities::config::cli::args;
use crate::config::cli_config;
mod command;
mod config;
async fn app() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
rustls::crypto::aws_lc_rs::default_provider()
.install_default()
.expect("Failed to install default crypto provider");
mogh_logger::init(&config::cli_config().cli_logging)?;
let args = config::cli_args();
let env = config::cli_env();
let debug_load =
args.debug_startup.unwrap_or(env.komodo_cli_debug_startup);
match &args.command {
args::Command::Config {
all_profiles,
unsanitized,
} => {
let mut config = if *unsanitized {
cli_config().clone()
} else {
cli_config().sanitized()
};
if !*all_profiles {
config.profile = Default::default();
}
if debug_load {
println!("\n{config:#?}");
} else {
println!(
"\nCLI Config {}",
serde_json::to_string_pretty(&config)
.context("Failed to serialize config for pretty print")?
);
}
Ok(())
}
args::Command::CoreInfo => command::core_info::handle().await,
args::Command::Container(container) => {
command::container::handle(container).await
}
args::Command::Inspect(inspect) => {
command::container::inspect_container(inspect).await
}
args::Command::List(list) => command::list::handle(list).await,
args::Command::Execute(args) => {
command::execute::handle(&args.execution, args.yes).await
}
args::Command::Create { command } => {
command::create::handle(command).await
}
args::Command::Update { command } => {
command::update::handle(command).await
}
args::Command::Connect(connect) => {
command::terminal::handle_connect(connect).await
}
args::Command::Exec(exec) => {
command::terminal::handle_exec(exec).await
}
args::Command::Attach(attach) => {
command::terminal::handle_attach(attach).await
}
args::Command::Key { command } => {
mogh_pki::cli::handle(command, mogh_pki::PkiKind::Mutual).await
}
args::Command::Database { command } => {
command::database::handle(command).await
}
}
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let mut term_signal = tokio::signal::unix::signal(
tokio::signal::unix::SignalKind::terminate(),
)?;
tokio::select! {
res = tokio::spawn(app()) => match res {
Ok(Err(e)) => {
eprintln!("{}: {e}", "ERROR".red());
std::process::exit(1)
}
Err(e) => {
eprintln!("{}: {e}", "ERROR".red());
std::process::exit(1)
},
Ok(_) => {}
},
_ = term_signal.recv() => {},
}
Ok(())
}
+85
View File
@@ -0,0 +1,85 @@
[package]
name = "komodo_core"
version.workspace = true
edition.workspace = true
license.workspace = true
homepage.workspace = true
repository.workspace = true
[[bin]]
name = "core"
path = "src/main.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
# local
komodo_client = { workspace = true, features = ["core"] }
periphery_client.workspace = true
mogh_validations.workspace = true
interpolate.workspace = true
mogh_secret_file.workspace = true
formatting.workspace = true
mogh_rate_limit.workspace = true
transport.workspace = true
database.workspace = true
encoding.workspace = true
command.workspace = true
mogh_config.workspace = true
mogh_logger.workspace = true
mogh_cache.workspace = true
mogh_pki.workspace = true
git.workspace = true
# mogh
mogh_error = { workspace = true, features = ["axum"] }
mogh_auth_client = { workspace = true, features = ["utoipa"] }
mogh_auth_server.workspace = true
async_timing_util.workspace = true
partial_derive2.workspace = true
mogh_resolver.workspace = true
mogh_server.workspace = true
toml_pretty.workspace = true
slack.workspace = true
svi.workspace = true
# external
aws-credential-types.workspace = true
english-to-cron.workspace = true
data-encoding.workspace = true
serde_yaml_ng.workspace = true
utoipa-scalar.workspace = true
futures-util.workspace = true
aws-sdk-ec2.workspace = true
urlencoding.workspace = true
aws-config.workspace = true
tokio-util.workspace = true
axum-extra.workspace = true
serde_json.workspace = true
typeshare.workspace = true
chrono-tz.workspace = true
indexmap.workspace = true
wildcard.workspace = true
arc-swap.workspace = true
serde_qs.workspace = true
colored.workspace = true
tracing.workspace = true
reqwest.workspace = true
dotenvy.workspace = true
anyhow.workspace = true
bcrypt.workspace = true
croner.workspace = true
chrono.workspace = true
rustls.workspace = true
utoipa.workspace = true
bytes.workspace = true
tokio.workspace = true
serde.workspace = true
strum.workspace = true
regex.workspace = true
axum.workspace = true
toml.workspace = true
uuid.workspace = true
envy.workspace = true
hmac.workspace = true
sha2.workspace = true
hex.workspace = true
url.workspace = true
+70
View File
@@ -0,0 +1,70 @@
## All in one, multi stage compile + runtime Docker build for your architecture.
# Build Core
FROM rust:1.97.1-trixie AS core-builder
RUN cargo install cargo-strip
WORKDIR /builder
COPY Cargo.toml Cargo.lock ./
COPY ./lib ./lib
COPY ./client/core/rs ./client/core/rs
COPY ./client/periphery ./client/periphery
COPY ./bin/core ./bin/core
COPY ./bin/cli ./bin/cli
COPY ./xtask ./xtask
# Compile app
RUN cargo build -p komodo_core --release && \
cargo build -p komodo_cli --release && \
cargo strip
# Build UI
FROM node:22.12-alpine AS ui-builder
WORKDIR /builder
COPY ./ui ./ui
COPY ./client/core/ts ./client
RUN cd client && yarn && yarn build && yarn link
RUN cd ui && yarn link komodo_client && yarn && yarn build
# Final Image
FROM debian:trixie-slim
COPY ./bin/core/starship.toml /starship.toml
COPY ./bin/core/debian-deps.sh .
RUN sh ./debian-deps.sh && rm ./debian-deps.sh
# Setup an application directory
WORKDIR /app
# Copy
COPY ./config/core.config.toml /config/.default.config.toml
COPY --from=ui-builder /builder/ui/dist /app/ui
COPY --from=core-builder /builder/target/release/core /usr/local/bin/core
COPY --from=core-builder /builder/target/release/km /usr/local/bin/km
COPY --from=denoland/deno:bin /deno /usr/local/bin/deno
# Set $DENO_DIR and preload external Deno deps
ENV DENO_DIR=/action-cache/deno
RUN mkdir /action-cache && \
cd /action-cache && \
deno install jsr:@std/yaml jsr:@std/toml
COPY ./bin/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
# Hint at the port
EXPOSE 9120
ENV KOMODO_CLI_CONFIG_PATHS="/config"
# This ensures any `komodo.cli.*` takes precedence over the Core `/config/*config.*`
ENV KOMODO_CLI_CONFIG_KEYWORDS="*config.*,*komodo.cli*.*"
ENTRYPOINT [ "entrypoint.sh" ]
CMD [ "core" ]
# Label to prevent Komodo from stopping with StopAllContainers
LABEL komodo.skip="true"
# Label for Ghcr
LABEL org.opencontainers.image.source="https://github.com/moghtech/komodo"
LABEL org.opencontainers.image.description="Komodo Core"
LABEL org.opencontainers.image.licenses="GPL-3.0"
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
## Core deps installer
apt-get update
apt-get install -y git curl ca-certificates iproute2
rm -rf /var/lib/apt/lists/*
# Starship prompt
curl -sS https://starship.rs/install.sh | sh -s -- --yes --bin-dir /usr/local/bin
echo 'export STARSHIP_CONFIG=/starship.toml' >> /root/.bashrc
echo 'eval "$(starship init bash)"' >> /root/.bashrc
+65
View File
@@ -0,0 +1,65 @@
## Assumes the latest binaries for x86_64 and aarch64 are already built (by binaries.Dockerfile).
## Sets up the necessary runtime container dependencies for Komodo Core.
## Since theres no heavy build here, QEMU multi-arch builds are fine for this image.
ARG BINARIES_IMAGE=ghcr.io/moghtech/komodo-binaries:2
ARG UI_IMAGE=ghcr.io/moghtech/komodo-ui:2
ARG X86_64_BINARIES=${BINARIES_IMAGE}-x86_64
ARG AARCH64_BINARIES=${BINARIES_IMAGE}-aarch64
# This is required to work with COPY --from
FROM ${X86_64_BINARIES} AS x86_64
FROM ${AARCH64_BINARIES} AS aarch64
FROM ${UI_IMAGE} AS ui
# Final Image
FROM debian:trixie-slim
COPY ./bin/core/starship.toml /starship.toml
COPY ./bin/core/debian-deps.sh .
RUN sh ./debian-deps.sh && rm ./debian-deps.sh
WORKDIR /app
ARG TARGETPLATFORM
# Copy both binaries initially, but only keep appropriate one for the TARGETPLATFORM.
COPY --from=x86_64 /core /app/core/linux/amd64
COPY --from=aarch64 /core /app/core/linux/arm64
RUN mv /app/core/${TARGETPLATFORM} /usr/local/bin/core && rm -r /app/core
# Same for km
COPY --from=x86_64 /km /app/km/linux/amd64
COPY --from=aarch64 /km /app/km/linux/arm64
RUN mv /app/km/${TARGETPLATFORM} /usr/local/bin/km && rm -r /app/km
# Copy default config / static ui / deno binary
COPY ./config/core.config.toml /config/.default.config.toml
COPY --from=ui /ui /app/ui
COPY --from=denoland/deno:bin /deno /usr/local/bin/deno
# Set $DENO_DIR and preload external Deno deps
ENV DENO_DIR=/action-cache/deno
RUN mkdir /action-cache && \
cd /action-cache && \
deno install jsr:@std/yaml jsr:@std/toml
COPY ./bin/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
# Hint at the port
EXPOSE 9120
ENV KOMODO_CLI_CONFIG_PATHS="/config"
# This ensures any `komodo.cli.*` takes precedence over the Core `/config/*config.*`
ENV KOMODO_CLI_CONFIG_KEYWORDS="*config.*,*komodo.cli*.*"
ENTRYPOINT [ "entrypoint.sh" ]
CMD [ "core" ]
# Label to prevent Komodo from stopping with StopAllContainers
LABEL komodo.skip="true"
# Label for Ghcr
LABEL org.opencontainers.image.source="https://github.com/moghtech/komodo"
LABEL org.opencontainers.image.description="Komodo Core"
LABEL org.opencontainers.image.licenses="GPL-3.0"
+54
View File
@@ -0,0 +1,54 @@
## Assumes the latest binaries for the required arch are already built (by binaries.Dockerfile).
## Sets up the necessary runtime container dependencies for Komodo Core.
ARG BINARIES_IMAGE=ghcr.io/moghtech/komodo-binaries:2
# This is required to work with COPY --from
FROM ${BINARIES_IMAGE} AS binaries
# Build UI
FROM node:22.12-alpine AS ui-builder
WORKDIR /builder
COPY ./ui ./ui
COPY ./client/core/ts ./client
RUN cd client && yarn && yarn build && yarn link
RUN cd ui && yarn link komodo_client && yarn && yarn build
FROM debian:trixie-slim
COPY ./bin/core/starship.toml /starship.toml
COPY ./bin/core/debian-deps.sh .
RUN sh ./debian-deps.sh && rm ./debian-deps.sh
# Copy
COPY ./config/core.config.toml /config/.default.config.toml
COPY --from=ui-builder /builder/ui/dist /app/ui
COPY --from=binaries /core /usr/local/bin/core
COPY --from=binaries /km /usr/local/bin/km
COPY --from=denoland/deno:bin /deno /usr/local/bin/deno
# Set $DENO_DIR and preload external Deno deps
ENV DENO_DIR=/action-cache/deno
RUN mkdir /action-cache && \
cd /action-cache && \
deno install jsr:@std/yaml jsr:@std/toml
COPY ./bin/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
# Hint at the port
EXPOSE 9120
ENV KOMODO_CLI_CONFIG_PATHS="/config"
# This ensures any `komodo.cli.*` takes precedence over the Core `/config/*config.*`
ENV KOMODO_CLI_CONFIG_KEYWORDS="*config.*,*komodo.cli*.*"
ENTRYPOINT [ "entrypoint.sh" ]
CMD [ "core" ]
# Label to prevent Komodo from stopping with StopAllContainers
LABEL komodo.skip="true"
# Label for Ghcr
LABEL org.opencontainers.image.source="https://github.com/moghtech/komodo"
LABEL org.opencontainers.image.description="Komodo Core"
LABEL org.opencontainers.image.licenses="GPL-3.0"
+381
View File
@@ -0,0 +1,381 @@
use std::sync::OnceLock;
use serde::Serialize;
use super::*;
pub async fn send_alert(
url: &str,
alert: &Alert,
) -> anyhow::Result<()> {
let level = fmt_level(alert.level);
let content = match &alert.data {
AlertData::Test { id, name } => {
let link = resource_link(ResourceTargetVariant::Alerter, id);
format!(
"{level} | If you see this message, then Alerter **{name}** is **working**\n{link}"
)
}
AlertData::SwarmUnhealthy { id, name, err } => {
let link = resource_link(ResourceTargetVariant::Swarm, id);
match alert.level {
SeverityLevel::Ok => {
format!(
"{level} | Swarm **{name}** is now **healthy**\n{link}"
)
}
SeverityLevel::Critical => {
let err = err
.as_ref()
.map(|e| format!("\n**error**: {e:#?}"))
.unwrap_or_default();
format!(
"{level} | Swarm **{name}** is **unhealthy** ❌\n{link}{err}"
)
}
_ => unreachable!(),
}
}
AlertData::ServerUnreachable {
id,
name,
region,
err,
} => {
let region = fmt_region(region);
let link = resource_link(ResourceTargetVariant::Server, id);
match alert.level {
SeverityLevel::Ok => {
format!(
"{level} | **{name}**{region} is now **connected**\n{link}"
)
}
SeverityLevel::Critical => {
let err = err
.as_ref()
.map(|e| format!("\n**error**: {e:#?}"))
.unwrap_or_default();
format!(
"{level} | **{name}**{region} is **unreachable** ❌\n{link}{err}"
)
}
_ => unreachable!(),
}
}
AlertData::ServerVersionMismatch {
id,
name,
region,
server_version,
core_version,
} => {
let region = fmt_region(region);
let link = resource_link(ResourceTargetVariant::Server, id);
match alert.level {
SeverityLevel::Ok => {
format!(
"{level} | **{name}**{region} | Periphery version now matches Core version ✅\n{link}"
)
}
_ => {
format!(
"{level} | **{name}**{region} | Version mismatch detected ⚠️\nPeriphery: **{server_version}** | Core: **{core_version}**\n{link}"
)
}
}
}
AlertData::ServerCpu {
id,
name,
region,
percentage,
} => {
let region = fmt_region(region);
let link = resource_link(ResourceTargetVariant::Server, id);
format!(
"{level} | **{name}**{region} cpu usage at **{percentage:.1}%**\n{link}"
)
}
AlertData::ServerMem {
id,
name,
region,
used_gb,
total_gb,
} => {
let region = fmt_region(region);
let link = resource_link(ResourceTargetVariant::Server, id);
let percentage = 100.0 * used_gb / total_gb;
format!(
"{level} | **{name}**{region} memory usage at **{percentage:.1}%** 💾\n\nUsing **{used_gb:.1} GiB** / **{total_gb:.1} GiB**\n{link}"
)
}
AlertData::ServerDisk {
id,
name,
region,
path,
used_gb,
total_gb,
} => {
let region = fmt_region(region);
let link = resource_link(ResourceTargetVariant::Server, id);
let percentage = 100.0 * used_gb / total_gb;
format!(
"{level} | **{name}**{region} disk usage at **{percentage:.1}%** 💿\nmount point: `{path:?}`\nusing **{used_gb:.1} GiB** / **{total_gb:.1} GiB**\n{link}"
)
}
AlertData::ContainerStateChange {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
from,
to,
} => {
let link = resource_link(ResourceTargetVariant::Deployment, id);
let to = fmt_docker_container_state(to);
let target = if let Some(swarm) = swarm_name {
format!("\nswarm: **{swarm}**")
} else if let Some(server) = server_name {
format!("\nserver: **{server}**")
} else {
String::new()
};
format!(
"📦 Deployment **{name}** is now **{to}**{target}\nprevious: **{from}**\n{link}"
)
}
AlertData::DeploymentImageUpdateAvailable {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
image,
} => {
let link = resource_link(ResourceTargetVariant::Deployment, id);
let target = if let Some(swarm) = swarm_name {
format!("\nswarm: **{swarm}**")
} else if let Some(server) = server_name {
format!("\nserver: **{server}**")
} else {
String::new()
};
format!(
"⬆ Deployment **{name}** has an update available{target}\nimage: **{image}**\n{link}"
)
}
AlertData::DeploymentAutoUpdated {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
image,
} => {
let link = resource_link(ResourceTargetVariant::Deployment, id);
let target = if let Some(swarm) = swarm_name {
format!("\nswarm: **{swarm}**")
} else if let Some(server) = server_name {
format!("\nserver: **{server}**")
} else {
String::new()
};
format!(
"⬆ Deployment **{name}** was updated automatically ⏫{target}\nimage: **{image}**\n{link}"
)
}
AlertData::StackStateChange {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
from,
to,
} => {
let link = resource_link(ResourceTargetVariant::Stack, id);
let to = fmt_stack_state(to);
let target = if let Some(swarm) = swarm_name {
format!("\nswarm: **{swarm}**")
} else if let Some(server) = server_name {
format!("\nserver: **{server}**")
} else {
String::new()
};
format!(
"🥞 Stack **{name}** is now {to}{target}\nprevious: **{from}**\n{link}"
)
}
AlertData::StackImageUpdateAvailable {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
service,
image,
} => {
let link = resource_link(ResourceTargetVariant::Stack, id);
let target = if let Some(swarm) = swarm_name {
format!("\nswarm: **{swarm}**")
} else if let Some(server) = server_name {
format!("\nserver: **{server}**")
} else {
String::new()
};
format!(
"⬆ Stack **{name}** has an update available{target}\nservice: **{service}**\nimage: **{image}**\n{link}"
)
}
AlertData::StackAutoUpdated {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
images,
} => {
let link = resource_link(ResourceTargetVariant::Stack, id);
let images_label =
if images.len() > 1 { "images" } else { "image" };
let images = images.join(", ");
let target = if let Some(swarm) = swarm_name {
format!("\nswarm: **{swarm}**")
} else if let Some(server) = server_name {
format!("\nserver: **{server}**")
} else {
String::new()
};
format!(
"⬆ Stack **{name}** was updated automatically ⏫{target}\n{images_label}: **{images}**\n{link}"
)
}
AlertData::AwsBuilderTerminationFailed {
instance_id,
message,
} => {
format!(
"{level} | Failed to terminated AWS builder instance\ninstance id: **{instance_id}**\n{message}"
)
}
AlertData::ResourceSyncPendingUpdates { id, name } => {
let link =
resource_link(ResourceTargetVariant::ResourceSync, id);
format!(
"{level} | Pending resource sync updates on **{name}**\n{link}"
)
}
AlertData::BuildFailed { id, name, version } => {
let link = resource_link(ResourceTargetVariant::Build, id);
format!(
"{level} | Build **{name}** failed\nversion: **v{version}**\n{link}"
)
}
AlertData::RepoBuildFailed { id, name } => {
let link = resource_link(ResourceTargetVariant::Repo, id);
format!("{level} | Repo build for **{name}** failed\n{link}")
}
AlertData::ProcedureFailed { id, name } => {
let link = resource_link(ResourceTargetVariant::Procedure, id);
format!("{level} | Procedure **{name}** failed\n{link}")
}
AlertData::ActionFailed { id, name } => {
let link = resource_link(ResourceTargetVariant::Action, id);
format!("{level} | Action **{name}** failed\n{link}")
}
AlertData::ScheduleRun {
resource_type,
id,
name,
} => {
let link = resource_link(*resource_type, id);
format!(
"{level} | **{name}** ({resource_type}) | Scheduled run started 🕝\n{link}"
)
}
AlertData::Custom { message, details } => {
format!(
"{level} | {message}{}",
if details.is_empty() {
String::new()
} else {
format!("\n{details}")
}
)
}
AlertData::None {} => Default::default(),
};
if content.is_empty() {
return Ok(());
}
let VariablesAndSecrets { variables, secrets } =
get_variables_and_secrets().await?;
let mut url_interpolated = url.to_string();
let mut interpolator =
Interpolator::new(Some(&variables), &secrets);
interpolator.interpolate_string(&mut url_interpolated)?;
send_message(&url_interpolated, &content)
.await
.map_err(|e| {
let replacers = interpolator
.secret_replacers
.into_iter()
.collect::<Vec<_>>();
let sanitized_error =
svi::replace_in_string(&format!("{e:?}"), &replacers);
anyhow::Error::msg(format!(
"Error with request to Discord: {sanitized_error}"
))
})
}
async fn send_message(
url: &str,
content: &str,
) -> anyhow::Result<()> {
let body = DiscordMessageBody { content };
let response = http_client()
.post(url)
.json(&body)
.send()
.await
.context("Failed to send message")?;
let status = response.status();
if status.is_success() {
Ok(())
} else {
let text = response.text().await.with_context(|| {
format!("Failed to send message to Discord | {status} | failed to get response text")
})?;
Err(anyhow::anyhow!(
"Failed to send message to Discord | {status} | {text}"
))
}
}
fn http_client() -> &'static reqwest::Client {
static CLIENT: OnceLock<reqwest::Client> = OnceLock::new();
CLIENT.get_or_init(reqwest::Client::new)
}
#[derive(Serialize)]
struct DiscordMessageBody<'a> {
content: &'a str,
}
+548
View File
@@ -0,0 +1,548 @@
use anyhow::{Context, anyhow};
use database::mungos::{find::find_collect, mongodb::bson::doc};
use futures_util::future::join_all;
use interpolate::Interpolator;
use komodo_client::entities::{
ResourceTargetVariant,
alert::{Alert, AlertData, AlertDataVariant, SeverityLevel},
alerter::*,
deployment::DeploymentState,
komodo_timestamp,
stack::StackState,
};
use crate::helpers::query::get_variables_and_secrets;
use crate::helpers::{
maintenance::is_in_maintenance, query::VariablesAndSecrets,
};
use crate::{config::core_config, state::db_client};
mod discord;
mod ntfy;
mod pushover;
mod slack;
pub async fn send_alerts(alerts: &[Alert]) {
if alerts.is_empty() {
return;
}
let Ok(alerters) = find_collect(
&db_client().alerters,
doc! { "config.enabled": true },
None,
)
.await
.inspect_err(|e| {
error!(
"ERROR sending alerts | failed to get alerters from db | {e:#}"
)
}) else {
return;
};
let handles = alerts
.iter()
.map(|alert| send_alert_to_alerters(&alerters, alert));
join_all(handles).await;
}
async fn send_alert_to_alerters(alerters: &[Alerter], alert: &Alert) {
if alerters.is_empty() {
return;
}
let handles = alerters
.iter()
.map(|alerter| send_alert_to_alerter(alerter, alert));
join_all(handles)
.await
.into_iter()
.filter_map(|res| res.err())
.for_each(|e| error!("{e:#}"));
}
pub async fn send_alert_to_alerter(
alerter: &Alerter,
alert: &Alert,
) -> anyhow::Result<()> {
// Don't send if not enabled
if !alerter.config.enabled {
return Ok(());
}
if is_in_maintenance(
&alerter.config.maintenance_windows,
komodo_timestamp(),
) {
return Ok(());
}
let alert_variant: AlertDataVariant = (&alert.data).into();
// In the test case, we don't want the filters inside this
// block to stop the test from being sent to the alerting endpoint.
if alert_variant != AlertDataVariant::Test {
// Don't send if alert type not configured on the alerter
if !alerter.config.alert_types.is_empty()
&& !alerter.config.alert_types.contains(&alert_variant)
{
return Ok(());
}
// Don't send if resource is in the blacklist
if alerter.config.except_resources.contains(&alert.target) {
return Ok(());
}
// Don't send if whitelist configured and target is not included
if !alerter.config.resources.is_empty()
&& !alerter.config.resources.contains(&alert.target)
{
return Ok(());
}
}
match &alerter.config.endpoint {
AlerterEndpoint::Custom(CustomAlerterEndpoint { url }) => {
send_custom_alert(url, alert).await.with_context(|| {
format!(
"Failed to send alert to Custom Alerter {}",
alerter.name
)
})
}
AlerterEndpoint::Slack(SlackAlerterEndpoint { url }) => {
slack::send_alert(url, alert).await.with_context(|| {
format!(
"Failed to send alert to Slack Alerter {}",
alerter.name
)
})
}
AlerterEndpoint::Discord(DiscordAlerterEndpoint { url }) => {
discord::send_alert(url, alert).await.with_context(|| {
format!(
"Failed to send alert to Discord Alerter {}",
alerter.name
)
})
}
AlerterEndpoint::Ntfy(NtfyAlerterEndpoint { url, email }) => {
ntfy::send_alert(url, email.as_deref(), alert)
.await
.with_context(|| {
format!(
"Failed to send alert to ntfy Alerter {}",
alerter.name
)
})
}
AlerterEndpoint::Pushover(PushoverAlerterEndpoint { url }) => {
pushover::send_alert(url, alert).await.with_context(|| {
format!(
"Failed to send alert to Pushover Alerter {}",
alerter.name
)
})
}
}
}
async fn send_custom_alert(
url: &str,
alert: &Alert,
) -> anyhow::Result<()> {
let VariablesAndSecrets { variables, secrets } =
get_variables_and_secrets().await?;
let mut url_interpolated = url.to_string();
let mut interpolator =
Interpolator::new(Some(&variables), &secrets);
interpolator.interpolate_string(&mut url_interpolated)?;
let res = reqwest::Client::new()
.post(url_interpolated)
.json(alert)
.send()
.await
.map_err(|e| {
let replacers = interpolator
.secret_replacers
.into_iter()
.collect::<Vec<_>>();
let sanitized_error =
svi::replace_in_string(&format!("{e:?}"), &replacers);
anyhow::Error::msg(format!(
"Error with request: {sanitized_error}"
))
})
.context("failed at post request to alerter")?;
let status = res.status();
if !status.is_success() {
let text = res
.text()
.await
.context("failed to get response text on alerter response")?;
return Err(anyhow!(
"post to alerter failed | {status} | {text}"
));
}
Ok(())
}
fn fmt_region(region: &Option<String>) -> String {
match region {
Some(region) => format!(" ({region})"),
None => String::new(),
}
}
fn fmt_docker_container_state(state: &DeploymentState) -> String {
match state {
DeploymentState::Running => String::from("Running ▶️"),
DeploymentState::Exited => String::from("Exited 🛑"),
DeploymentState::Restarting => String::from("Restarting 🔄"),
DeploymentState::NotDeployed => String::from("Not Deployed"),
_ => state.to_string(),
}
}
fn fmt_stack_state(state: &StackState) -> String {
match state {
StackState::Running => String::from("Running ▶️"),
StackState::Stopped => String::from("Stopped 🛑"),
StackState::Restarting => String::from("Restarting 🔄"),
StackState::Down => String::from("Down ⬇️"),
_ => state.to_string(),
}
}
fn fmt_level(level: SeverityLevel) -> &'static str {
match level {
SeverityLevel::Critical => "CRITICAL 🚨",
SeverityLevel::Warning => "WARNING ‼️",
SeverityLevel::Ok => "OK ✅",
}
}
fn resource_link(
resource_type: ResourceTargetVariant,
id: &str,
) -> String {
komodo_client::entities::resource_link(
&core_config().host,
resource_type,
id,
)
}
/// Standard message content format
/// used by Ntfy, Pushover.
fn standard_alert_content(alert: &Alert) -> String {
let level = fmt_level(alert.level);
match &alert.data {
AlertData::Test { id, name } => {
let link = resource_link(ResourceTargetVariant::Alerter, id);
format!(
"{level} | If you see this message, then Alerter {name} is working\n{link}",
)
}
AlertData::SwarmUnhealthy { id, name, err } => {
let link = resource_link(ResourceTargetVariant::Swarm, id);
match alert.level {
SeverityLevel::Ok => {
format!("{level} | Swarm {name} is now healthy\n{link}")
}
SeverityLevel::Critical => {
let err = err
.as_ref()
.map(|e| format!("\nerror: {e:#?}"))
.unwrap_or_default();
format!(
"{level} | Swarm {name} is unhealthy ❌\n{link}{err}"
)
}
_ => unreachable!(),
}
}
AlertData::ServerUnreachable {
id,
name,
region,
err,
} => {
let region = fmt_region(region);
let link = resource_link(ResourceTargetVariant::Server, id);
match alert.level {
SeverityLevel::Ok => {
format!("{level} | {name}{region} is now connected\n{link}")
}
SeverityLevel::Critical => {
let err = err
.as_ref()
.map(|e| format!("\nerror: {e:#?}"))
.unwrap_or_default();
format!(
"{level} | {name}{region} is unreachable ❌\n{link}{err}"
)
}
_ => unreachable!(),
}
}
AlertData::ServerVersionMismatch {
id,
name,
region,
server_version,
core_version,
} => {
let region = fmt_region(region);
let link = resource_link(ResourceTargetVariant::Server, id);
match alert.level {
SeverityLevel::Ok => {
format!(
"{level} | {name}{region} | Periphery version now matches Core version ✅\n{link}"
)
}
_ => {
format!(
"{level} | {name}{region} | Version mismatch detected ⚠️\nPeriphery: {server_version} | Core: {core_version}\n{link}"
)
}
}
}
AlertData::ServerCpu {
id,
name,
region,
percentage,
} => {
let region = fmt_region(region);
let link = resource_link(ResourceTargetVariant::Server, id);
format!(
"{level} | {name}{region} cpu usage at {percentage:.1}%\n{link}",
)
}
AlertData::ServerMem {
id,
name,
region,
used_gb,
total_gb,
} => {
let region = fmt_region(region);
let link = resource_link(ResourceTargetVariant::Server, id);
let percentage = 100.0 * used_gb / total_gb;
format!(
"{level} | {name}{region} memory usage at {percentage:.1}%💾\n\nUsing {used_gb:.1} GiB / {total_gb:.1} GiB\n{link}",
)
}
AlertData::ServerDisk {
id,
name,
region,
path,
used_gb,
total_gb,
} => {
let region = fmt_region(region);
let link = resource_link(ResourceTargetVariant::Server, id);
let percentage = 100.0 * used_gb / total_gb;
format!(
"{level} | {name}{region} disk usage at {percentage:.1}%💿\nmount point: {path:?}\nusing {used_gb:.1} GiB / {total_gb:.1} GiB\n{link}",
)
}
AlertData::ContainerStateChange {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
from,
to,
} => {
let link = resource_link(ResourceTargetVariant::Deployment, id);
let to_state = fmt_docker_container_state(to);
let target = if let Some(swarm) = swarm_name {
format!("\nswarm: {swarm}")
} else if let Some(server) = server_name {
format!("\nserver: {server}")
} else {
String::new()
};
format!(
"📦Deployment {name} is now {to_state}{target}\nprevious: {from}\n{link}",
)
}
AlertData::DeploymentImageUpdateAvailable {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
image,
} => {
let link = resource_link(ResourceTargetVariant::Deployment, id);
let target = if let Some(swarm) = swarm_name {
format!("\nswarm: {swarm}")
} else if let Some(server) = server_name {
format!("\nserver: {server}")
} else {
String::new()
};
format!(
"⬆ Deployment {name} has an update available{target}\nimage: {image}\n{link}",
)
}
AlertData::DeploymentAutoUpdated {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
image,
} => {
let link = resource_link(ResourceTargetVariant::Deployment, id);
let target = if let Some(swarm) = swarm_name {
format!("\nswarm: {swarm}")
} else if let Some(server) = server_name {
format!("\nserver: {server}")
} else {
String::new()
};
format!(
"⬆ Deployment {name} was updated automatically{target}\nimage: {image}\n{link}",
)
}
AlertData::StackStateChange {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
from,
to,
} => {
let link = resource_link(ResourceTargetVariant::Stack, id);
let to_state = fmt_stack_state(to);
let target = if let Some(swarm) = swarm_name {
format!("\nswarm: {swarm}")
} else if let Some(server) = server_name {
format!("\nserver: {server}")
} else {
String::new()
};
format!(
"🥞 Stack {name} is now {to_state}{target}\nprevious: {from}\n{link}",
)
}
AlertData::StackImageUpdateAvailable {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
service,
image,
} => {
let link = resource_link(ResourceTargetVariant::Stack, id);
let target = if let Some(swarm) = swarm_name {
format!("\nswarm: {swarm}")
} else if let Some(server) = server_name {
format!("\nserver: {server}")
} else {
String::new()
};
format!(
"⬆ Stack {name} has an update available{target}\nservice: {service}\nimage: {image}\n{link}",
)
}
AlertData::StackAutoUpdated {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
images,
} => {
let link = resource_link(ResourceTargetVariant::Stack, id);
let images_label =
if images.len() > 1 { "images" } else { "image" };
let images_str = images.join(", ");
let target = if let Some(swarm) = swarm_name {
format!("\nswarm: {swarm}")
} else if let Some(server) = server_name {
format!("\nserver: {server}")
} else {
String::new()
};
format!(
"⬆ Stack {name} was updated automatically ⏫{target}\n{images_label}: {images_str}\n{link}",
)
}
AlertData::AwsBuilderTerminationFailed {
instance_id,
message,
} => {
format!(
"{level} | Failed to terminate AWS builder instance\ninstance id: {instance_id}\n{message}",
)
}
AlertData::ResourceSyncPendingUpdates { id, name } => {
let link =
resource_link(ResourceTargetVariant::ResourceSync, id);
format!(
"{level} | Pending resource sync updates on {name}\n{link}",
)
}
AlertData::BuildFailed { id, name, version } => {
let link = resource_link(ResourceTargetVariant::Build, id);
format!(
"{level} | Build {name} failed\nversion: v{version}\n{link}",
)
}
AlertData::RepoBuildFailed { id, name } => {
let link = resource_link(ResourceTargetVariant::Repo, id);
format!("{level} | Repo build for {name} failed\n{link}",)
}
AlertData::ProcedureFailed { id, name } => {
let link = resource_link(ResourceTargetVariant::Procedure, id);
format!("{level} | Procedure {name} failed\n{link}")
}
AlertData::ActionFailed { id, name } => {
let link = resource_link(ResourceTargetVariant::Action, id);
format!("{level} | Action {name} failed\n{link}")
}
AlertData::ScheduleRun {
resource_type,
id,
name,
} => {
let link = resource_link(*resource_type, id);
format!(
"{level} | {name} ({resource_type}) | Scheduled run started 🕝\n{link}"
)
}
AlertData::Custom { message, details } => {
format!(
"{level} | {message}{}",
if details.is_empty() {
String::new()
} else {
format!("\n{details}")
}
)
}
AlertData::None {} => Default::default(),
}
}
+75
View File
@@ -0,0 +1,75 @@
use std::sync::OnceLock;
use super::*;
pub async fn send_alert(
url: &str,
email: Option<&str>,
alert: &Alert,
) -> anyhow::Result<()> {
let content = standard_alert_content(alert);
if content.is_empty() {
return Ok(());
}
let VariablesAndSecrets { variables, secrets } =
get_variables_and_secrets().await?;
let mut url_interpolated = url.to_string();
let mut interpolator =
Interpolator::new(Some(&variables), &secrets);
interpolator.interpolate_string(&mut url_interpolated)?;
send_message(&url_interpolated, email, content)
.await
.map_err(|e| {
let replacers = interpolator
.secret_replacers
.into_iter()
.collect::<Vec<_>>();
let sanitized_error =
svi::replace_in_string(&format!("{e:?}"), &replacers);
anyhow::Error::msg(format!(
"Error with request to Ntfy: {sanitized_error}"
))
})
}
async fn send_message(
url: &str,
email: Option<&str>,
content: String,
) -> anyhow::Result<()> {
let mut request = http_client()
.post(url)
.header("Title", "Komodo Alert")
.body(content);
if let Some(email) = email {
request = request.header("X-Email", email);
}
let response =
request.send().await.context("Failed to send message")?;
let status = response.status();
if status.is_success() {
debug!("ntfy alert sent successfully: {}", status);
Ok(())
} else {
let text = response.text().await.with_context(|| {
format!(
"Failed to send message to ntfy | {status} | failed to get response text"
)
})?;
Err(anyhow!(
"Failed to send message to ntfy | {status} | {text}",
))
}
}
fn http_client() -> &'static reqwest::Client {
static CLIENT: OnceLock<reqwest::Client> = OnceLock::new();
CLIENT.get_or_init(reqwest::Client::new)
}
+74
View File
@@ -0,0 +1,74 @@
use std::sync::OnceLock;
use super::*;
pub async fn send_alert(
url: &str,
alert: &Alert,
) -> anyhow::Result<()> {
let content = standard_alert_content(alert);
if content.is_empty() {
return Ok(());
}
let VariablesAndSecrets { variables, secrets } =
get_variables_and_secrets().await?;
let mut url_interpolated = url.to_string();
let mut interpolator =
Interpolator::new(Some(&variables), &secrets);
interpolator.interpolate_string(&mut url_interpolated)?;
send_message(&url_interpolated, content).await.map_err(|e| {
let replacers = interpolator
.secret_replacers
.into_iter()
.collect::<Vec<_>>();
let sanitized_error =
svi::replace_in_string(&format!("{e:?}"), &replacers);
anyhow::Error::msg(format!(
"Error with request to Pushover: {sanitized_error}"
))
})
}
async fn send_message(
url: &str,
content: String,
) -> anyhow::Result<()> {
// pushover needs all information to be encoded in the URL. At minimum they need
// the user key, the application token, and the message (url encoded).
// other optional params here: https://pushover.net/api (just add them to the
// webhook url along with the application token and the user key).
let content = [("message", content)];
let response = http_client()
.post(url)
.form(&content)
.send()
.await
.context("Failed to send message")?;
let status = response.status();
if status.is_success() {
debug!("pushover alert sent successfully: {}", status);
Ok(())
} else {
let text = response.text().await.with_context(|| {
format!(
"Failed to send message to pushover | {status} | failed to get response text"
)
})?;
Err(anyhow!(
"Failed to send message to pushover | {} | {}",
status,
text
))
}
}
fn http_client() -> &'static reqwest::Client {
static CLIENT: OnceLock<reqwest::Client> = OnceLock::new();
CLIENT.get_or_init(reqwest::Client::new)
}
+579
View File
@@ -0,0 +1,579 @@
use ::slack::types::OwnedBlock as Block;
use super::*;
pub async fn send_alert(
url: &str,
alert: &Alert,
) -> anyhow::Result<()> {
let level = fmt_level(alert.level);
let (text, blocks): (_, Option<_>) = match &alert.data {
AlertData::Test { id, name } => {
let text = format!(
"{level} | If you see this message, then Alerter *{name}* is *working*"
);
let blocks = vec![
Block::header(level),
Block::section(format!(
"If you see this message, then Alerter *{name}* is *working*"
)),
Block::section(resource_link(
ResourceTargetVariant::Alerter,
id,
)),
];
(text, blocks.into())
}
AlertData::SwarmUnhealthy { id, name, err } => {
match alert.level {
SeverityLevel::Ok => {
let text =
format!("{level} | Swarm *{name}* is now *healthy*");
let blocks = vec![
Block::header(level),
Block::section(format!(
"Swarm *{name}* is now *healthy*"
)),
];
(text, blocks.into())
}
SeverityLevel::Critical => {
let text =
format!("{level} | Swarm *{name}* is *unhealthy* ❌");
let err = err
.as_ref()
.map(|e| format!("\nerror: {e:#?}"))
.unwrap_or_default();
let blocks = vec![
Block::header(level),
Block::section(format!(
"Swarm *{name}* is *unhealthy* ❌{err}"
)),
Block::section(resource_link(
ResourceTargetVariant::Server,
id,
)),
];
(text, blocks.into())
}
_ => unreachable!(),
}
}
AlertData::ServerUnreachable {
id,
name,
region,
err,
} => {
let region = fmt_region(region);
match alert.level {
SeverityLevel::Ok => {
let text =
format!("{level} | *{name}*{region} is now *connected*");
let blocks = vec![
Block::header(level),
Block::section(format!(
"*{name}*{region} is now *connected*"
)),
];
(text, blocks.into())
}
SeverityLevel::Critical => {
let text =
format!("{level} | *{name}*{region} is *unreachable* ❌");
let err = err
.as_ref()
.map(|e| format!("\nerror: {e:#?}"))
.unwrap_or_default();
let blocks = vec![
Block::header(level),
Block::section(format!(
"*{name}*{region} is *unreachable* ❌{err}"
)),
Block::section(resource_link(
ResourceTargetVariant::Server,
id,
)),
];
(text, blocks.into())
}
_ => unreachable!(),
}
}
AlertData::ServerVersionMismatch {
id,
name,
region,
server_version,
core_version,
} => {
let region = fmt_region(region);
let text = match alert.level {
SeverityLevel::Ok => {
format!(
"{level} | *{name}*{region} | Periphery version now matches Core version ✅"
)
}
_ => {
format!(
"{level} | *{name}*{region} | Version mismatch detected ⚠️\nPeriphery: {server_version} | Core: {core_version}"
)
}
};
let blocks = vec![
Block::header(text.clone()),
Block::section(resource_link(
ResourceTargetVariant::Server,
id,
)),
];
(text, blocks.into())
}
AlertData::ServerCpu {
id,
name,
region,
percentage,
} => {
let region = fmt_region(region);
match alert.level {
SeverityLevel::Ok => {
let text = format!(
"{level} | *{name}*{region} cpu usage at *{percentage:.1}%*"
);
let blocks = vec![
Block::header(level),
Block::section(format!(
"*{name}*{region} cpu usage at *{percentage:.1}%*"
)),
Block::section(resource_link(
ResourceTargetVariant::Server,
id,
)),
];
(text, blocks.into())
}
_ => {
let text = format!(
"{level} | *{name}*{region} cpu usage at *{percentage:.1}%* 📈"
);
let blocks = vec![
Block::header(level),
Block::section(format!(
"*{name}*{region} cpu usage at *{percentage:.1}%* 📈"
)),
Block::section(resource_link(
ResourceTargetVariant::Server,
id,
)),
];
(text, blocks.into())
}
}
}
AlertData::ServerMem {
id,
name,
region,
used_gb,
total_gb,
} => {
let region = fmt_region(region);
let percentage = 100.0 * used_gb / total_gb;
match alert.level {
SeverityLevel::Ok => {
let text = format!(
"{level} | *{name}*{region} memory usage at *{percentage:.1}%* 💾"
);
let blocks = vec![
Block::header(level),
Block::section(format!(
"*{name}*{region} memory usage at *{percentage:.1}%* 💾"
)),
Block::section(format!(
"using *{used_gb:.1} GiB* / *{total_gb:.1} GiB*"
)),
Block::section(resource_link(
ResourceTargetVariant::Server,
id,
)),
];
(text, blocks.into())
}
_ => {
let text = format!(
"{level} | *{name}*{region} memory usage at *{percentage:.1}%* 💾"
);
let blocks = vec![
Block::header(level),
Block::section(format!(
"*{name}*{region} memory usage at *{percentage:.1}%* 💾"
)),
Block::section(format!(
"using *{used_gb:.1} GiB* / *{total_gb:.1} GiB*"
)),
Block::section(resource_link(
ResourceTargetVariant::Server,
id,
)),
];
(text, blocks.into())
}
}
}
AlertData::ServerDisk {
id,
name,
region,
path,
used_gb,
total_gb,
} => {
let region = fmt_region(region);
let percentage = 100.0 * used_gb / total_gb;
match alert.level {
SeverityLevel::Ok => {
let text = format!(
"{level} | *{name}*{region} disk usage at *{percentage:.1}%* | mount point: *{path:?}* 💿"
);
let blocks = vec![
Block::header(level),
Block::section(format!(
"*{name}*{region} disk usage at *{percentage:.1}%* 💿"
)),
Block::section(format!(
"mount point: {path:?} | using *{used_gb:.1} GiB* / *{total_gb:.1} GiB*"
)),
Block::section(resource_link(
ResourceTargetVariant::Server,
id,
)),
];
(text, blocks.into())
}
_ => {
let text = format!(
"{level} | *{name}*{region} disk usage at *{percentage:.1}%* | mount point: *{path:?}* 💿"
);
let blocks = vec![
Block::header(level),
Block::section(format!(
"*{name}*{region} disk usage at *{percentage:.1}%* 💿"
)),
Block::section(format!(
"mount point: {path:?} | using *{used_gb:.1} GiB* / *{total_gb:.1} GiB*"
)),
Block::section(resource_link(
ResourceTargetVariant::Server,
id,
)),
];
(text, blocks.into())
}
}
}
AlertData::ContainerStateChange {
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
from,
to,
id,
} => {
let to = fmt_docker_container_state(to);
let text = format!("📦 Container *{name}* is now *{to}*");
let target = if let Some(swarm) = swarm_name {
format!("swarm: *{swarm}*\n")
} else if let Some(server) = server_name {
format!("server: *{server}*\n")
} else {
String::new()
};
let blocks = vec![
Block::header(text.clone()),
Block::section(format!("{target}previous: {from}",)),
Block::section(resource_link(
ResourceTargetVariant::Deployment,
id,
)),
];
(text, blocks.into())
}
AlertData::DeploymentImageUpdateAvailable {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
image,
} => {
let text =
format!("⬆ Deployment *{name}* has an update available");
let target = if let Some(swarm) = swarm_name {
format!("swarm: *{swarm}*\n")
} else if let Some(server) = server_name {
format!("server: *{server}*\n")
} else {
String::new()
};
let blocks = vec![
Block::header(text.clone()),
Block::section(format!("{target}image: *{image}*",)),
Block::section(resource_link(
ResourceTargetVariant::Deployment,
id,
)),
];
(text, blocks.into())
}
AlertData::DeploymentAutoUpdated {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
image,
} => {
let text =
format!("⬆ Deployment *{name}* was updated automatically ⏫");
let target = if let Some(swarm) = swarm_name {
format!("swarm: *{swarm}*\n")
} else if let Some(server) = server_name {
format!("server: *{server}*\n")
} else {
String::new()
};
let blocks = vec![
Block::header(text.clone()),
Block::section(format!("{target}image: *{image}*",)),
Block::section(resource_link(
ResourceTargetVariant::Deployment,
id,
)),
];
(text, blocks.into())
}
AlertData::StackStateChange {
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
from,
to,
id,
} => {
let to = fmt_stack_state(to);
let text = format!("🥞 Stack *{name}* is now *{to}*");
let target = if let Some(swarm) = swarm_name {
format!("swarm: *{swarm}*\n")
} else if let Some(server) = server_name {
format!("server: *{server}*\n")
} else {
String::new()
};
let blocks = vec![
Block::header(text.clone()),
Block::section(format!("{target}previous: *{from}*",)),
Block::section(resource_link(
ResourceTargetVariant::Stack,
id,
)),
];
(text, blocks.into())
}
AlertData::StackImageUpdateAvailable {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
service,
image,
} => {
let text = format!("⬆ Stack *{name}* has an update available");
let target = if let Some(swarm) = swarm_name {
format!("swarm: *{swarm}*\n")
} else if let Some(server) = server_name {
format!("server: *{server}*\n")
} else {
String::new()
};
let blocks = vec![
Block::header(text.clone()),
Block::section(format!(
"{target}service: *{service}*\nimage: *{image}*",
)),
Block::section(resource_link(
ResourceTargetVariant::Stack,
id,
)),
];
(text, blocks.into())
}
AlertData::StackAutoUpdated {
id,
name,
swarm_id: _swarm_id,
swarm_name,
server_id: _server_id,
server_name,
images,
} => {
let text =
format!("⬆ Stack *{name}* was updated automatically ⏫");
let images_label =
if images.len() > 1 { "images" } else { "image" };
let images = images.join(", ");
let target = if let Some(swarm) = swarm_name {
format!("swarm: *{swarm}*\n")
} else if let Some(server) = server_name {
format!("server: *{server}*\n")
} else {
String::new()
};
let blocks = vec![
Block::header(text.clone()),
Block::section(
format!("{target}{images_label}: *{images}*",),
),
Block::section(resource_link(
ResourceTargetVariant::Stack,
id,
)),
];
(text, blocks.into())
}
AlertData::AwsBuilderTerminationFailed {
instance_id,
message,
} => {
let text = format!(
"{level} | Failed to terminated AWS builder instance "
);
let blocks = vec![
Block::header(text.clone()),
Block::section(format!(
"instance id: *{instance_id}*\n{message}"
)),
];
(text, blocks.into())
}
AlertData::ResourceSyncPendingUpdates { id, name } => {
let text = format!(
"{level} | Pending resource sync updates on *{name}*"
);
let blocks = vec![
Block::header(text.clone()),
Block::section(format!(
"sync id: *{id}*\nsync name: *{name}*",
)),
Block::section(resource_link(
ResourceTargetVariant::ResourceSync,
id,
)),
];
(text, blocks.into())
}
AlertData::BuildFailed { id, name, version } => {
let text = format!("{level} | Build {name} has failed");
let blocks = vec![
Block::header(text.clone()),
Block::section(format!("version: *v{version}*",)),
Block::section(resource_link(
ResourceTargetVariant::Build,
id,
)),
];
(text, blocks.into())
}
AlertData::RepoBuildFailed { id, name } => {
let text =
format!("{level} | Repo build for *{name}* has *failed*");
let blocks = vec![
Block::header(text.clone()),
Block::section(resource_link(
ResourceTargetVariant::Repo,
id,
)),
];
(text, blocks.into())
}
AlertData::ProcedureFailed { id, name } => {
let text = format!("{level} | Procedure *{name}* has *failed*");
let blocks = vec![
Block::header(text.clone()),
Block::section(resource_link(
ResourceTargetVariant::Procedure,
id,
)),
];
(text, blocks.into())
}
AlertData::ActionFailed { id, name } => {
let text = format!("{level} | Action *{name}* has *failed*");
let blocks = vec![
Block::header(text.clone()),
Block::section(resource_link(
ResourceTargetVariant::Action,
id,
)),
];
(text, blocks.into())
}
AlertData::ScheduleRun {
resource_type,
id,
name,
} => {
let text = format!(
"{level} | *{name}* ({resource_type}) | Scheduled run started 🕝"
);
let blocks = vec![
Block::header(text.clone()),
Block::section(resource_link(*resource_type, id)),
];
(text, blocks.into())
}
AlertData::Custom { message, details } => {
let text = format!("{level} | {message}");
let blocks =
vec![Block::header(text.clone()), Block::section(details)];
(text, blocks.into())
}
AlertData::None {} => Default::default(),
};
if text.is_empty() {
return Ok(());
}
let VariablesAndSecrets { variables, secrets } =
get_variables_and_secrets().await?;
let mut url_interpolated = url.to_string();
let mut interpolator =
Interpolator::new(Some(&variables), &secrets);
interpolator.interpolate_string(&mut url_interpolated)?;
let slack = ::slack::Client::new(url_interpolated);
slack
.send_owned_message_single(&text, None, blocks.as_deref())
.await
.map_err(|e| {
let replacers = interpolator
.secret_replacers
.into_iter()
.collect::<Vec<_>>();
let sanitized_error =
svi::replace_in_string(&format!("{e:?}"), &replacers);
anyhow::Error::msg(format!(
"Error with request to Slack: {sanitized_error}"
))
})?;
Ok(())
}
+544
View File
@@ -0,0 +1,544 @@
use std::{
collections::HashSet,
path::{Path, PathBuf},
sync::OnceLock,
};
use anyhow::Context as _;
use command::{CommandOptions, run_komodo_standard_command};
use database::{
bson::doc,
mungos::{by_id::update_one_by_id, mongodb::bson::to_document},
};
use interpolate::Interpolator;
use komodo_client::{
api::execute::{
BatchExecutionResponse, BatchRunAction, CancelAction, RunAction,
},
entities::{
FileFormat, JsonObject, Operation,
action::Action,
alert::{Alert, AlertData, SeverityLevel},
config::core::CoreConfig,
komodo_timestamp,
permission::PermissionLevel,
random_string,
update::{Update, UpdateStatus},
user::action_user,
},
parsers::parse_key_value_list,
};
use mogh_auth_client::api::manage::{
CreateApiKey, CreateApiKeyResponse,
};
use mogh_auth_server::api::manage::api_key::{
create_api_key, delete_api_key,
};
use mogh_config::merge_objects;
use mogh_resolver::Resolve;
use tokio::fs;
use tokio_util::sync::CancellationToken;
use crate::{
alert::send_alerts,
api::execute::ExecuteRequest,
auth::KomodoAuthImpl,
config::core_config,
helpers::{
query::{VariablesAndSecrets, get_variables_and_secrets},
update::update_update,
},
permission::get_check_permissions,
resource::refresh_action_state_cache,
state::{action_cancel_cache, action_states, db_client},
};
use super::ExecuteArgs;
impl super::BatchExecute for BatchRunAction {
type Resource = Action;
fn single_request(action: String) -> ExecuteRequest {
ExecuteRequest::RunAction(RunAction {
action,
args: Default::default(),
})
}
}
impl Resolve<ExecuteArgs> for BatchRunAction {
#[instrument(
"BatchRunAction",
skip_all,
fields(
task_id = task_id.to_string(),
operator = user.id,
pattern = self.pattern,
tags = self.tags.join(","),
)
)]
async fn resolve(
self,
ExecuteArgs { user, task_id, .. }: &ExecuteArgs,
) -> mogh_error::Result<BatchExecutionResponse> {
Ok(
super::batch_execute::<BatchRunAction>(
&self.pattern,
self.tags,
user,
)
.await?,
)
}
}
impl Resolve<ExecuteArgs> for RunAction {
#[instrument(
"RunAction",
skip_all,
fields(
task_id = task_id.to_string(),
operator = user.id,
update_id = update.id,
action = self.action,
)
)]
async fn resolve(
self,
ExecuteArgs {
user,
update,
task_id,
}: &ExecuteArgs,
) -> mogh_error::Result<Update> {
let mut action = get_check_permissions::<Action>(
&self.action,
user,
PermissionLevel::Execute.into(),
)
.await?;
// get the action state for the action (or insert default).
let action_state = action_states()
.action
.get_or_insert_default(&action.id)
.await;
// This will set action state back to default when dropped.
// Will also check to ensure action not already busy before updating.
let action_guard = action_state.update_custom(
|state| state.running += 1,
|state| state.running -= 1,
false,
)?;
let mut update = update.clone();
update_update(update.clone()).await?;
let default_args = parse_action_arguments(
&action.config.arguments,
action.config.arguments_format,
)
.context("Failed to parse default Action arguments")?;
let args = merge_objects(
default_args,
self.args.unwrap_or_default(),
true,
true,
)
.context("Failed to merge request args with default args")?;
let args = serde_json::to_string(&args)
.context("Failed to serialize action run arguments")?;
let CreateApiKeyResponse { key, secret } = create_api_key(
&KomodoAuthImpl,
action_user().id.clone(),
CreateApiKey {
name: update.id.clone(),
expires: 0,
},
)
.await?;
// Do next steps in seperate error handling block,
// and delete the API key before unwrapping the error.
// If Komodo shuts down during these steps, there will
// be a dangling api key in the DB with user_id: "000000000000000000000002".
// These need to be
let res = async {
let contents = &mut action.config.file_contents;
// Wrap the file contents in the execution context.
*contents = full_contents(contents, &args, &key, &secret);
let replacers = interpolate(
contents,
&mut update,
key.clone(),
secret.clone(),
)
.await?
.into_iter()
.collect::<Vec<_>>();
let file = format!("{}.ts", random_string(10));
let path = core_config().action_directory.join(&file);
mogh_secret_file::write_async(&path, contents)
.await
.with_context(|| {
format!("Failed to write action file to {path:?}")
})?;
let CoreConfig { ssl_enabled, .. } = core_config();
let https_cert_flag = if *ssl_enabled {
" --unsafely-ignore-certificate-errors=localhost"
} else {
""
};
let reload = if action.config.reload_deno_deps {
" --reload"
} else {
""
};
let cancel = CancellationToken::new();
action_cancel_cache()
.insert(update.id.clone(), cancel.clone())
.await;
let mut res = run_komodo_standard_command(
// Keep this stage name as is, the UI will find the latest update log by matching the stage name
"Execute Action",
format!(
"deno run --allow-all{https_cert_flag}{reload} {}",
path.display()
),
CommandOptions::default().cancel(cancel),
)
.await;
res.stdout = svi::replace_in_string(&res.stdout, &replacers)
.replace(&key, "<ACTION_API_KEY>");
res.stderr = svi::replace_in_string(&res.stderr, &replacers)
.replace(&secret, "<ACTION_API_SECRET>");
cleanup_run(file + ".js", &path).await;
update.logs.push(res);
update.finalize();
mogh_error::Ok(())
}
.await;
if let Err(e) =
delete_api_key(&KomodoAuthImpl, &action_user().id, key).await
{
warn!(
"Failed to delete API key after action execution | {:#}",
e.error
);
};
action_cancel_cache().remove(&update.id).await;
// Drop action guard before updating
// clients to requery action state
drop(action_guard);
res?;
// Need to manually update the update before cache refresh,
// and before broadcast with update_update.
// The Err case of to_document should be unreachable,
// but will fail to update cache in that case.
if let Ok(update_doc) = to_document(&update) {
let _ = update_one_by_id(
&db_client().updates,
&update.id,
database::mungos::update::Update::Set(update_doc),
None,
)
.await;
refresh_action_state_cache().await;
}
update_update(update.clone()).await?;
if !update.success && action.config.failure_alert {
let target = update.target.clone();
tokio::spawn(async move {
let alert = Alert {
id: Default::default(),
target,
ts: komodo_timestamp(),
resolved_ts: Some(komodo_timestamp()),
resolved: true,
level: SeverityLevel::Warning,
data: AlertData::ActionFailed {
id: action.id,
name: action.name,
},
};
send_alerts(&[alert]).await
});
}
Ok(update)
}
}
#[instrument("Interpolate", skip(contents, update, secret))]
async fn interpolate(
contents: &mut String,
update: &mut Update,
key: String,
secret: String,
) -> mogh_error::Result<HashSet<(String, String)>> {
let VariablesAndSecrets {
variables,
mut secrets,
} = get_variables_and_secrets().await?;
secrets.insert(String::from("ACTION_API_KEY"), key);
secrets.insert(String::from("ACTION_API_SECRET"), secret);
let mut interpolator =
Interpolator::new(Some(&variables), &secrets);
interpolator
.interpolate_string(contents)?
.push_logs(&mut update.logs);
Ok(interpolator.secret_replacers)
}
fn full_contents(
contents: &str,
// Pre-serialized to JSON string.
args: &str,
key: &str,
secret: &str,
) -> String {
let CoreConfig {
port, ssl_enabled, ..
} = core_config();
let protocol = if *ssl_enabled { "https" } else { "http" };
let base_url = format!("{protocol}://localhost:{port}");
format!(
"import {{ KomodoClient, Types }} from '{base_url}/client/lib.js';
import * as __YAML__ from 'jsr:@std/yaml';
import * as __TOML__ from 'jsr:@std/toml';
const YAML = {{
stringify: __YAML__.stringify,
parse: __YAML__.parse,
parseAll: __YAML__.parseAll,
parseDockerCompose: __YAML__.parse,
}}
const TOML = {{
stringify: __TOML__.stringify,
parse: __TOML__.parse,
parseResourceToml: __TOML__.parse,
parseCargoToml: __TOML__.parse,
}}
const ARGS = {args};
const komodo = KomodoClient('{base_url}', {{
type: 'api-key',
params: {{ key: '{key}', secret: '{secret}' }}
}});
async function main() {{
{contents}
console.log('🦎 Action completed successfully 🦎');
}}
main()
.catch(error => {{
console.error('🚨 Action exited early with errors 🚨')
if (error.status !== undefined && error.result !== undefined) {{
console.error('Status:', error.status);
console.error(JSON.stringify(error.result, null, 2));
}} else {{
console.error(error);
}}
Deno.exit(1)
}});"
)
}
/// Cleans up file at given path.
/// ALSO if $DENO_DIR is set,
/// will clean up the generated file matching "file"
#[instrument("CleanupRun")]
async fn cleanup_run(file: String, path: &Path) {
if let Err(e) = fs::remove_file(path).await {
warn!(
"Failed to delete action file after action execution | {e:#}"
);
}
// If $DENO_DIR is set (will be in container),
// will clean up the generated file matching "file" (NOT under path)
let Some(deno_dir) = deno_dir() else {
return;
};
delete_file(deno_dir.join("gen/file"), file).await;
}
fn deno_dir() -> Option<&'static Path> {
static DENO_DIR: OnceLock<Option<PathBuf>> = OnceLock::new();
DENO_DIR
.get_or_init(|| {
let deno_dir = std::env::var("DENO_DIR").ok()?;
Some(PathBuf::from(&deno_dir))
})
.as_deref()
}
/// file is just the terminating file path,
/// it may be nested multiple folder under path,
/// this will find the nested file and delete it.
/// Assumes the file is only there once.
fn delete_file(
dir: PathBuf,
file: String,
) -> std::pin::Pin<Box<dyn std::future::Future<Output = bool> + Send>>
{
Box::pin(async move {
let Ok(mut dir) = fs::read_dir(dir).await else {
return false;
};
// Collect the nested folders for recursing
// only after checking all the files in directory.
let mut folders = Vec::<PathBuf>::new();
while let Ok(Some(entry)) = dir.next_entry().await {
let Ok(meta) = entry.metadata().await else {
continue;
};
if meta.is_file() {
let Ok(name) = entry.file_name().into_string() else {
continue;
};
if name == file {
if let Err(e) = fs::remove_file(entry.path()).await {
warn!(
"Failed to clean up generated file after action execution | {e:#}"
);
};
return true;
}
} else {
folders.push(entry.path());
}
}
if folders.len() == 1 {
// unwrap ok, folders definitely is not empty
let folder = folders.pop().unwrap();
delete_file(folder, file).await
} else {
// Check folders with file.clone
for folder in folders {
if delete_file(folder, file.clone()).await {
return true;
}
}
false
}
})
}
fn parse_action_arguments(
args: &str,
format: FileFormat,
) -> anyhow::Result<JsonObject> {
match format {
FileFormat::KeyValue => {
let args = parse_key_value_list(args)
.context("Failed to parse args as key value list")?
.into_iter()
.map(|(k, v)| (k, serde_json::Value::String(v)))
.collect();
Ok(args)
}
FileFormat::Toml => toml::from_str(args)
.context("Failed to parse Toml to Action args"),
FileFormat::Yaml => serde_yaml_ng::from_str(args)
.context("Failed to parse Yaml to action args"),
FileFormat::Json => serde_json::from_str(args)
.context("Failed to parse Json to action args"),
}
}
impl Resolve<ExecuteArgs> for CancelAction {
#[instrument(
"CancelAction",
skip_all,
fields(
task_id = task_id.to_string(),
operator = user.id,
update_id = update.id,
action = self.action,
)
)]
async fn resolve(
self,
ExecuteArgs {
user,
update,
task_id,
}: &ExecuteArgs,
) -> Result<Self::Response, Self::Error> {
let action = get_check_permissions::<Action>(
&self.action,
user,
PermissionLevel::Execute.into(),
)
.await?;
let update_id = if let Some(update_id) = self.update_id
&& !update_id.is_empty()
{
update_id
} else {
db_client()
.updates
.find_one(doc! {
"target.type": "Action",
"target.id": &action.id,
"operation": Operation::RunAction.as_ref(),
"status": UpdateStatus::InProgress.as_ref(),
})
.await?
.context("No active run to cancel found")?
.id
};
action_cancel_cache()
.get(&update_id)
.await
.context("Action run cancel token not found")?
.cancel();
let mut update = update.clone();
update.push_simple_log(
"Cancel Triggered",
"The action cancel has been triggered.",
);
update.finalize();
update_update(update.clone()).await?;
Ok(update)
}
}

Some files were not shown because too many files have changed in this diff Show More