Compare commits

...

53 Commits

Author SHA1 Message Date
4729fb7824 chore: publish 3.3.0+v7.91 release 2025-06-10 14:50:29 +02:00
eb951f1a1c chore: publish 3.2.0+v7.80 release 2025-02-04 23:43:44 +01:00
70331d393f remove stacksize and change main.js path for next release 2025-02-04 23:37:35 +01:00
2286535613 Update .drone.yml 2025-01-08 10:09:13 -08:00
2bd0920564 chore: publish 3.1.0+v7.61 release 2024-10-29 17:07:55 +01:00
66e3194385 update backupbot label 2024-10-24 15:44:19 +02:00
078fb53d4e chore: publish 3.0.0+v7.50 release 2024-07-09 15:18:43 +02:00
1d9317c231 update database 2024-07-09 15:11:34 +02:00
94cc1db80c chore: publish 2.2.0+v7.50 release 2024-07-06 00:46:32 +02:00
17b1b99c9f add writable path for database dumps 2024-07-05 19:46:28 +02:00
b167073868 add performonace optimization
https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
2024-07-05 19:45:42 +02:00
523aefdb4a add writable path for attachments/avatars 2024-07-05 19:39:47 +02:00
4b71066eda add wekan branding 2024-05-15 14:20:21 +02:00
f8d76d082b chore: publish 2.1.1+v7.30 release 2024-05-14 22:53:18 +02:00
41de881966 healthcheck checks for cpu overload 2024-05-14 22:31:50 +02:00
51b24791a4 add alakazam integration file alaconnect.yml 2024-05-13 17:41:05 +02:00
aa06f74560 add admin promotion to README 2024-02-13 17:06:16 +01:00
b1609c5ef4 Merge pull request 'chore: publish 2.1.0+v7.30 release' (#1) from simon/wekan:main into main
Reviewed-on: coop-cloud/wekan#1
2024-01-31 12:50:53 +00:00
98d595d287 chore: publish 2.1.0+v7.30 release 2024-01-30 14:59:18 +01:00
85c09e0fab chore: publish 2.0.0+v7.10 release 2023-10-25 18:00:05 +02:00
3wc
53a08095f2 chore: publish 1.0.0+v6.99 release 2023-09-23 20:46:23 +01:00
a9181c180e chore: publish 0.14.0+v6.99 release 2023-07-18 13:51:03 +02:00
bc3b7a4dba fix domain env 2023-07-10 00:43:59 +02:00
d7a3f874c9 chore: publish 0.13.2+v6.81 release 2023-06-26 17:57:44 +02:00
9b84875ea0 chore: formatting 2023-06-26 17:09:43 +02:00
16753c808a chore: point backup to a volume directory 2023-06-26 17:09:25 +02:00
16b48136e7 enable mongo logs 2023-06-26 17:09:10 +02:00
083310a964 fix: remove secret version from abra.sh 2023-06-23 11:42:39 +02:00
d3e1340e03 chore: publish 0.13.1+v6.81 release 2023-04-25 12:10:04 +02:00
28c8f7539a add auto update and timeout env 2023-04-18 18:22:54 +02:00
97a348ce29 add timeout 2023-04-13 20:36:16 +02:00
3d94108785 chore: publish 0.13.0+v6.81 release 2023-04-05 18:33:11 +02:00
3wc
a77f2c1ed9 Switch to self-hosted stack-ssh-deploy image [mass update] 2023-01-21 11:49:56 -08:00
3wc
a07ac5f0df Add drone configs / secrets [mass update] 2023-01-20 21:32:07 -08:00
3wc
f5b210f028 Add CI and catalogue generation [mass update] 2023-01-20 10:45:33 -08:00
2d361c154a chore: publish 0.12.0+v6.68 release 2023-01-08 19:50:23 +01:00
7782fd4d56 chore: publish 0.11.0+v6.67 release 2023-01-06 10:49:38 +01:00
beac62e1c9 chore: publish 0.10.0+v6.60 release 2022-12-02 13:23:07 +01:00
75bfa3f489 chore: publish 0.9.0+v6.34 release 2022-08-08 11:15:10 +02:00
79a695c90a chore: publish 0.8.0+v6.31 release 2022-08-04 17:49:22 +02:00
e46525e512 chore: publish 0.7.0+v6.30 release 2022-07-21 13:58:26 +02:00
246a9229cb add mongodb replicaset mode 2022-06-22 15:04:19 +02:00
9224bb6238 chore: publish 0.6.0+v6.28 release 2022-06-22 13:54:25 +02:00
9f89d5d475 chore: publish 0.5.0+v6.20 release 2022-05-05 15:56:28 +02:00
d97a48af0e v6.20 2022-05-05 15:49:08 +02:00
9b49dad813 v6.12 2022-03-16 13:00:00 +01:00
3c88052a67 v6.12 2022-03-16 11:49:15 +01:00
ccf2c7e223 bump to v6.11 2022-03-07 14:31:35 +01:00
a6ce73bb5b add ldap 2022-03-02 14:31:26 +01:00
4275535838 update entrypoint 2022-03-02 14:28:17 +01:00
688429c257 update entrypoint 2022-02-17 10:22:28 +01:00
d71099a9dc chore: publish 0.2.0+v6.05 release 2022-02-08 09:38:57 +01:00
5ce2801951 chore: publish 0.1.1+v5.98 release 2022-02-04 13:43:45 +01:00
12 changed files with 407 additions and 70 deletions

41
.drone.yml Normal file
View File

@ -0,0 +1,41 @@
---
kind: pipeline
name: deploy to swarm-test.autonomic.zone
steps:
- name: deployment
image: git.coopcloud.tech/coop-cloud/stack-ssh-deploy:latest
settings:
host: swarm-test.autonomic.zone
stack: wekan
generate_secrets: true
purge: true
deploy_key:
from_secret: drone_ssh_swarm_test
networks:
- proxy
environment:
DOMAIN: wekan.swarm-test.autonomic.zone
STACK_NAME: wekan
LETS_ENCRYPT_ENV: production
SECRET_OAUTH2_SECRET_VERSION: v1
ENTRYPOINT_VERSION: v2
SECRET_OAUTH2_SECRET_VERSION: v1
trigger:
branch:
- main
---
kind: pipeline
name: generate recipe catalogue
steps:
- name: release a new version
image: plugins/downstream
settings:
server: https://build.coopcloud.tech
token:
from_secret: drone_abra-bot_token
fork: true
repositories:
- toolshed/auto-recipes-catalogue-json
trigger:
event: tag

View File

@ -1,31 +1,106 @@
TYPE=wekan
TIMEOUT=300
ENABLE_AUTO_UPDATE=true
ENABLE_BACKUPS=true
LETS_ENCRYPT_ENV=production
SECRET_OAUTH2_SECRET_VERSION=v1
MONGO_URL=mongodb://db:27017/wekan
COMPOSE_FILE="compose.yml"
DOMAIN=board.example.com
ROOT_URL=https://board.example.com
# Set this to run mongodb in replicaset mode (needs initialisation!)
# COMPOSE_FILE="${COMPOSE_FILE}:compose.rs.yml"
DOMAIN=wekan.example.com
ROOT_URL=https://wekan.example.com
DEBUG=false
OAUTH2_ENABLED=true
OAUTH2_LOGIN_STYLE=redirect
OAUTH2_CLIENT_ID=wekan
OAUTH2_SERVER_URL=https://sso.example.com
OAUTH2_AUTH_ENDPOINT=/application/o/authorize/
OAUTH2_USERINFO_ENDPOINT=/application/o/userinfo/
OAUTH2_TOKEN_ENDPOINT=/application/o/token/
OAUTH2_REQUEST_PERMISSIONS="openid profile email wekan"
OAUTH2_ID_MAP=preferred_username
OAUTH2_USERNAME_MAP=preferred_username
OAUTH2_FULLNAME_MAP=given_name
OAUTH2_EMAIL_MAP=email
PASSWORD_LOGIN_ENABLED=false
MAIL_URL=smtp://smtp:25/?ignoreTLS=true&tls={rejectUnauthorized:false}
MAIL_FROM="[WeKan] Wekan Notifications <noreply@example.org>"
WITH_API=true
RICHER_CARD_COMMENT_EDITOR=false
RICHER_CARD_COMMENT_EDITOR=false
# CORS=*
# CORS_ALLOW_HEADERS=Authorization,Content-Type
# CORS_EXPOSE_HEADERS=*
# PASSWORD_LOGIN_ENABLED=false
# LOGO_IMG_URL=https://authentik.example.com/static/dist/assets/icons/icon_left_brand.svg
# LOGO_LINK_URL=https://authentik.example.com
### OAUTH2 ###
OAUTH2_ENABLED=false
# OAUTH2_LOGIN_STYLE=redirect
# OAUTH2_CLIENT_ID=wekan
# OAUTH2_SERVER_URL=https://authentik.example.com
# OAUTH2_AUTH_ENDPOINT=/application/o/authorize/
# OAUTH2_USERINFO_ENDPOINT=/application/o/userinfo/
# OAUTH2_TOKEN_ENDPOINT=/application/o/token/
# OAUTH2_REQUEST_PERMISSIONS="openid profile email wekan"
# OAUTH2_ID_MAP=preferred_username
# OAUTH2_USERNAME_MAP=preferred_username
# OAUTH2_FULLNAME_MAP=given_name
# OAUTH2_EMAIL_MAP=email
# PROPAGATE_OIDC_DATA=true
# OIDC_REDIRECTION_ENABLED=true
### LDAP ###
#COMPOSE_FILE="$COMPOSE_FILE:compose.ldap.yml"
# DEFAULT_AUTHENTICATION_METHOD=ldap
# LDAP_ENABLE=true
# LDAP_PORT=389
# LDAP_HOST=ldap.example.org
# LDAP_AD_SIMPLE_AUTH=false
# LDAP_USER_AUTHENTICATION=true
# LDAP_USER_AUTHENTICATION_FIELD=cn
# LDAP_DEFAULT_DOMAIN=mydomain.com
# LDAP_BASEDN=dc=ldap,dc=goauthentik,dc=io
# LDAP_LOGIN_FALLBACK=false
# LDAP_RECONNECT=true
# LDAP_TIMEOUT=10000
# LDAP_IDLE_TIMEOUT=10000
# LDAP_CONNECT_TIMEOUT=10000
# LDAP_AUTHENTIFICATION=true
# LDAP_AUTHENTIFICATION_USERDN=cn=admin,dc=ldap,dc=goauthentik,dc=io"
# LDAP_AUTHENTIFICATION_PASSWORD=secret
# LDAP_LOG_ENABLED=true
# LDAP_BACKGROUND_SYNC=true
# LDAP_BACKGROUND_SYNC_INTERVAL='every 1 hour'
# LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true
# LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true
# LDAP_ENCRYPTION=false
# LDAP_CA_CERT=-----BEGIN CERTIFICATE-----MIIE+G2FIdAgIC...-----END CERTIFICATE-----
# LDAP_REJECT_UNAUTHORIZED=false
# LDAP_USER_SEARCH_FILTER=
# LDAP_USER_SEARCH_SCOPE=ou=users,dc=ldap,dc=goauthentik,dc=io
# LDAP_USER_SEARCH_FIELD=cn
# LDAP_SEARCH_PAGE_SIZE=0
# LDAP_SEARCH_SIZE_LIMIT=0
# Enable group filtering. Note the authenticated ldap user must be able to query all relevant group data with own login data from ldap.
# LDAP_GROUP_FILTER_ENABLE=true
# LDAP_GROUP_FILTER_OBJECTCLASS=group
# LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE=cn
# LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE=member
# LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT=dn
# LDAP_GROUP_FILTER_GROUP_NAME=
# LDAP_UNIQUE_IDENTIFIER_FIELD=guid
# LDAP_UTF8_NAMES_SLUGIFY=true
# LDAP_USERNAME_FIELD=cn
# LDAP_FULLNAME_FIELD=name
# LDAP_MERGE_EXISTING_USERS=true
# LDAP_EMAIL_MATCH_ENABLE=true
# LDAP_EMAIL_MATCH_REQUIRE=true
# LDAP_EMAIL_MATCH_VERIFIED=true
# LDAP_EMAIL_FIELD=mail
# LDAP_SYNC_USER_DATA=true
# LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name", "mail":"email"}
# LDAP_SYNC_GROUP_ROLES=
# LDAP_SYNC_ADMIN_STATUS=true
# LDAP_SYNC_ADMIN_GROUPS=admin

View File

@ -27,3 +27,27 @@ See original [docker-compose.yml](https://github.com/wekan/wekan/blob/master/doc
For more, see [`docs.coopcloud.tech`](https://docs.coopcloud.tech).
## use mongodb with replicaset
needed to enable oplog setting in wekan, which isneeded to run bigger instances?
after mongo conaintainer came up the first time run:
```
abra app run wekan.example.org db mongo
> rs.initiate()
```
## Promote user to admin
If using SSO, it might happen that there is no admin user. If so, you can fix it manually in the database:
```
$ abra app run <app-name> db bash
# mongo
> use wekan
> db.users.find({'username': '<your username>'})
> db.users.updateOne({'_id': '<_id from result above>'}, {$set: {'isAdmin': true}})
```

27
abra.sh
View File

@ -1,2 +1,25 @@
export SECRET_OAUTH2_SECRET_VERSION=v1
export ENTRYPOINT_VERSION=v1
export ENTRYPOINT_VERSION=v4
set_settings(){
mongosh wekan --eval '
db.settings.updateOne(
{},
{
$set: {
"disableForgotPassword": true,
"displayAuthenticationMethod" : false,
"disableRegistration" : true,
"customTopLeftCornerLogoImageUrl": "'$LOGO_IMG_URL'",
"customTopLeftCornerLogoLinkUrl": "'$LOGO_LINK_URL'",
}
}
)'
}
show_mongo_version (){
mongosh --eval 'db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )'
}
update_mongo_version (){
mongosh --eval 'db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )'
}

20
alaconnect.yml Normal file
View File

@ -0,0 +1,20 @@
authentik:
env:
OAUTH2_ENABLED: "true"
OAUTH2_SERVER_URL: https://authentik.example.com
# TODO: set CLIENT_ID as secret
OAUTH2_CLIENT_ID: wekan
uncomment:
- OAUTH2_LOGIN_STYLE
- OAUTH2_AUTH_ENDPOINT
- OAUTH2_USERINFO_ENDPOINT
- OAUTH2_TOKEN_ENDPOINT
- OAUTH2_REQUEST_PERMISSIONS
- OAUTH2_ID_MAP
- OAUTH2_USERNAME_MAP
- OAUTH2_FULLNAME_MAP
- OAUTH2_EMAIL_MAP
- PROPAGATE_OIDC_DATA
- OIDC_REDIRECTION_ENABLED
shared_secrets:
wekan_secret: oauth2_secret

54
compose.ldap.yml Normal file
View File

@ -0,0 +1,54 @@
version: "3.8"
services:
app:
environment:
- LDAP_ENABLE
- LDAP_PORT
- LDAP_HOST
- LDAP_AD_SIMPLE_AUTH
- LDAP_USER_AUTHENTICATION
- LDAP_USER_AUTHENTICATION_FIELD
- LDAP_DEFAULT_DOMAIN
- LDAP_BASEDN
- LDAP_LOGIN_FALLBACK
- LDAP_RECONNECT
- LDAP_TIMEOUT
- LDAP_IDLE_TIMEOUT
- LDAP_CONNECT_TIMEOUT
- LDAP_AUTHENTIFICATION
- LDAP_AUTHENTIFICATION_USERDN
- LDAP_AUTHENTIFICATION_PASSWORD
- LDAP_LOG_ENABLED
- LDAP_BACKGROUND_SYNC
- LDAP_BACKGROUND_SYNC_INTERVAL
- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED
- LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS
- LDAP_ENCRYPTION
- LDAP_CA_CERT
- LDAP_REJECT_UNAUTHORIZED
- LDAP_USER_SEARCH_FILTER
- LDAP_USER_SEARCH_SCOPE
- LDAP_USER_SEARCH_FIELD
- LDAP_SEARCH_PAGE_SIZE
- LDAP_SEARCH_SIZE_LIMIT
- LDAP_GROUP_FILTER_ENABLE
- LDAP_GROUP_FILTER_OBJECTCLASS
- LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE
- LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE
- LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT
- LDAP_GROUP_FILTER_GROUP_NAME
- LDAP_UNIQUE_IDENTIFIER_FIELD
- LDAP_UTF8_NAMES_SLUGIFY
- LDAP_USERNAME_FIELD
- LDAP_FULLNAME_FIELD
- LDAP_MERGE_EXISTING_USERS
- LDAP_EMAIL_MATCH_ENABLE
- LDAP_EMAIL_MATCH_REQUIRE
- LDAP_EMAIL_MATCH_VERIFIED
- LDAP_EMAIL_FIELD
- LDAP_SYNC_USER_DATA
- LDAP_SYNC_USER_DATA_FIELDMAP
- LDAP_SYNC_GROUP_ROLES
- LDAP_SYNC_ADMIN_STATUS
- LDAP_SYNC_ADMIN_GROUPS

10
compose.rs.yml Normal file
View File

@ -0,0 +1,10 @@
version: "3.8"
services:
db:
command: mongod --oplogSize 128 --replSet rs0
app:
environment:
- MONGO_URL=mongodb://db:27017/wekan?replicaSet=rs01
- MONGO_OPLOG_URL=mongodb://db:27017/local?replicaSet=rsWekan=value

View File

@ -1,32 +1,44 @@
version: '3.8'
services:
db:
image: mongo:4.4
command: mongod --logpath /dev/null --oplogSize 128 --quiet
image: mongo:6.0
environment:
- LOGO_IMG_URL
- LOGO_LINK_URL
command: mongod --oplogSize 128 --quiet
volumes:
- wekan-db:/data/db
networks:
- internal
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongo localhost:27017/test --quiet
test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet
interval: 30s
timeout: 10s
retries: 10
start_period: 1m
deploy:
labels:
backupbot.backup: "true"
backupbot.backup.pre-hook: "mkdir /tmp/backup/ && mongodump --archive=/tmp/backup/wekan.db"
backupbot.backup.post-hook: "rm -rf /tmp/backup"
backupbot.backup.path: "/tmp/backup/"
backupbot.backup: "${ENABLE_BACKUPS:-true}"
backupbot.backup.pre-hook: "mongodump --archive=/data/db/wekan.db"
backupbot.backup.volumes.wekan-db.path: "wekan.db"
backupbot.restore.post-hook: 'mongorestore --drop --archive=/data/db/wekan.db'
app:
image: quay.io/wekan/wekan:v5.99
image: quay.io/wekan/wekan:v7.91
environment:
- MONGO_URL
- MONGO_URL=mongodb://db:27017/wekan
- NODE_OPTIONS="--max_old_space_size=4096"
- DOMAIN
- ROOT_URL
- DEBUG
- MAIL_URL
- MAIL_FROM
- WITH_API
- RICHER_CARD_COMMENT_EDITOR
- CORS
- CORS_ALLOW_HEADERS
- CORS_EXPOSE_HEADERS
- PASSWORD_LOGIN_ENABLED
- OAUTH2_ENABLED
- OAUTH2_LOGIN_STYLE
- OAUTH2_CLIENT_ID
@ -40,27 +52,28 @@ services:
- OAUTH2_USERNAME_MAP
- OAUTH2_FULLNAME_MAP
- OAUTH2_EMAIL_MAP
- PASSWORD_LOGIN_ENABLED
- MAIL_URL
- MAIL_FROM
- WITH_API
- RICHER_CARD_COMMENT_EDITOR
- DEFAULT_AUTHENTICATION_METHOD
- PROPAGATE_OIDC_DATA
- OIDC_REDIRECTION_ENABLED
- WRITABLE_PATH=/data
volumes:
- wekan-files:/data:rw
networks:
- internal
- proxy
- internal
- proxy
depends_on:
- db
healthcheck:
test: node /build/healthcheck.js # no curl for healthcheck in wekan container
test: bash /build/healthcheck.sh
interval: 30s
timeout: 10s
retries: 10
start_period: 1m
start_period: 3m
secrets:
- oauth2_secret
configs:
- source: healthcheck_js
target: /build/healthcheck.js
- source: healthcheck_sh
target: /build/healthcheck.sh
mode: 0555
- source: entrypoint
target: /home/wekan/app/docker-entrypoint.sh
@ -77,20 +90,22 @@ services:
- "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "coop-cloud.${STACK_NAME}.version=0.1.0+v5.99"
- "coop-cloud.${STACK_NAME}.version=3.3.0+v7.91"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}"
volumes:
wekan-db:
wekan-files:
networks:
proxy:
external: true
internal:
configs:
healthcheck_js:
name: ${STACK_NAME}_healthcheck_js
file: healthcheck.js
healthcheck_sh:
name: ${STACK_NAME}_healthcheck_sh
file: healthcheck.sh
entrypoint:
name: ${STACK_NAME}_entrypoint_${ENTRYPOINT_VERSION}
file: entrypoint.sh.tmpl

View File

@ -25,4 +25,8 @@ file_env() {
}
file_env "OAUTH2_SECRET"
node /build/main.js
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
#bash -c "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"
# https://github.com/wekan/wekan/pull/5588
#bash -c "ulimit -n 65500; exec node /build/main.js"
bash -c "exec node /build/main.js"

View File

@ -1,23 +0,0 @@
const http = require('http');
const options = {
host: '0.0.0.0',
port: 8080,
timeout: 2000
};
const healthCheck = http.request(options, (res) => {
console.log(`HEALTHCHECK STATUS: ${res.statusCode}`);
if (res.statusCode == 200) {
process.exit(0);
}
else {
process.exit(1);
}
});
healthCheck.on('error', function (err) {
console.error('ERROR');
process.exit(1);
});
healthCheck.end();

87
healthcheck.sh Normal file
View File

@ -0,0 +1,87 @@
#!/bin/sh
printf "GET / HTTP/1.1\n\n" > /dev/tcp/127.0.0.1/8080
if [ $? != 0 ]; then
echo "Webservice not accessible"
exit 1
fi
CPU_USAGE_THRESHOLD=100.0
PID=$(pidof node)
if [ -z "$PID" ]; then
echo "Node.js process not running."
exit 1
fi
STATE_FILE="/tmp/cpu_usage_state_$PID"
# Function to get total CPU time
get_total_cpu_time() {
cat /proc/stat | grep '^cpu ' | awk '{sum=0; for(i=2;i<=NF;i++) sum += $i; print sum;}'
}
# Function to get process CPU time
get_process_cpu_time() {
cat /proc/$PID/stat | awk '{print $14+$15}' # Only user and system time
}
# Function to get the number of CPUs
get_cpu_count() {
grep -c '^processor' /proc/cpuinfo
}
# Main script
if [ -z "$PID" ]; then
echo "Usage: $0 <pid>"
exit 1
fi
# Check if the process directory exists
if [ ! -d "/proc/$PID" ]; then
echo "Process with PID $PID does not exist."
exit 1
fi
# Get current CPU times
current_total=$(get_total_cpu_time)
current_process=$(get_process_cpu_time $PID)
# Check for previous state
if [ -f "$STATE_FILE" ]; then
# Read previous state
read prev_total prev_process < "$STATE_FILE"
# Calculate the CPU usage
delta_total=$((current_total - prev_total))
delta_process=$((current_process - prev_process))
CPU_COUNT=$(get_cpu_count)
# Normalize CPU usage across all CPUs and calculate percentage
if [ $delta_total -gt 0 ]; then # To avoid division by zero
CPU_USAGE=$(awk -v delta_process="$delta_process" -v delta_total="$delta_total" -v cpu_count="$CPU_COUNT" \
'BEGIN {printf "%.2f", (delta_process / delta_total) * 100 * cpu_count}')
awk -v usage="$CPU_USAGE" -v threshold="$CPU_USAGE_THRESHOLD" '
BEGIN {
if (usage > threshold) {
print "High CPU usage: " usage "% (Threshold: " threshold "%)";
exit 1; # Exit with status 1 for high usage
} else {
print "CPU usage within limits: " usage "%";
exit 0; # Normal exit status
}
}'
EXIT_STATUS=$?
else
echo "No enough data to calculate CPU usage. Please try again."
fi
else
echo "No previous data found. Run the script later to get CPU usage."
fi
# Save current state
echo "$current_total $current_process" > "$STATE_FILE"
if [ $EXIT_STATUS -ne 0 ]; then
echo "Exiting due to high CPU usage."
exit $EXIT_STATUS
fi

7
release/3.0.0+v7.50 Normal file
View File

@ -0,0 +1,7 @@
Breaking Change: Update MongoDB from version 5.0 to 6.0.
========================================================
Before updating:
Run `abra app cmd <app_domaon> db show_mongo_version` to check if the featureCompatibilityVersion is above 5.0 !
Run `abra app cmd <app_domaon> db update_mongo_version` to set featureCompatibilityVersion to version 5.0