import db
This commit is contained in:
47
app/sbin/ODOO_19/dbVersion
Executable file
47
app/sbin/ODOO_19/dbVersion
Executable file
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env python3
|
||||
import csv
|
||||
import sys
|
||||
import zipfile
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: python3 check_odoo_version.py <dump.zip>")
|
||||
sys.exit(1)
|
||||
|
||||
zip_path = sys.argv[1]
|
||||
base_version = None
|
||||
|
||||
with zipfile.ZipFile(zip_path, 'r') as z:
|
||||
# Assume there is only one .sql file in the zip
|
||||
sql_files = [f for f in z.namelist() if f.endswith('.sql')]
|
||||
if not sql_files:
|
||||
print("No .sql file found in the zip.")
|
||||
sys.exit(1)
|
||||
|
||||
sql_file_name = sql_files[0]
|
||||
|
||||
with z.open(sql_file_name, 'r') as f:
|
||||
# Decode bytes to string
|
||||
lines = (line.decode('utf-8') for line in f)
|
||||
|
||||
# Skip lines until COPY command
|
||||
for line in lines:
|
||||
if line.startswith("COPY public.ir_module_module"):
|
||||
break
|
||||
|
||||
# Read the COPY data until the terminator '\.'
|
||||
reader = csv.reader(lines, delimiter='\t', quotechar='"', escapechar='\\')
|
||||
for row in reader:
|
||||
if row == ['\\.']: # End of COPY
|
||||
break
|
||||
if len(row) < 12:
|
||||
continue
|
||||
module_name = row[7].strip() # 8th column = name
|
||||
if module_name == "base":
|
||||
base_version = row[11].strip() # 12th column = latest_version
|
||||
break
|
||||
|
||||
if base_version:
|
||||
print(base_version.split(".")[0])
|
||||
else:
|
||||
print("Base module not found in dump.")
|
||||
|
||||
32
app/sbin/ODOO_19/import
Normal file
32
app/sbin/ODOO_19/import
Normal file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Create the tmp directory if it doesn't exist
|
||||
mkdir -p /4server/tmp/
|
||||
|
||||
# Save original stdout
|
||||
exec 3>&1
|
||||
|
||||
# Redirect all other output to log
|
||||
exec > /4server/data/log/importDb.log 2>&1
|
||||
echo "$(date '+%Y-%m-%d %H:%M') Import file $1"
|
||||
|
||||
# Generate random 8-digit filename
|
||||
RANDOM_FILE="/4server/tmp/$(printf "%08d" $((RANDOM % 100000000))).zip"
|
||||
|
||||
# Download file from Google Drive using gdown
|
||||
gdown "$1" -O "$RANDOM_FILE"
|
||||
|
||||
# Execute dbVersion on the downloaded file and capture output
|
||||
VERSION=$(/4server/sbin/ODOO_19/dbVersion "$RANDOM_FILE")
|
||||
|
||||
# Output JSON to original stdout
|
||||
cat <<EOF >&3
|
||||
{
|
||||
"version":"$VERSION",
|
||||
"file":"$RANDOM_FILE"
|
||||
}
|
||||
EOF
|
||||
|
||||
# Close saved stdout
|
||||
exec 3>&-
|
||||
|
||||
36
app/sbin/api
36
app/sbin/api
@@ -24,7 +24,7 @@ from pathlib import Path
|
||||
DB_PATH = "/4server/data/contracts.db"
|
||||
BIN_PATH = "/4server/sbin"
|
||||
API_KEY = os.getenv("API_KEY", "your-secret-api-key")
|
||||
VERSION = "API: 0.0.7"
|
||||
VERSION = "API: 0.0.8"
|
||||
|
||||
# ---------------------- FastAPI App ----------------------
|
||||
app = FastAPI()
|
||||
@@ -124,6 +124,13 @@ class CommandRequest(BaseModel):
|
||||
uuid: str
|
||||
method: int
|
||||
|
||||
class ImportRequest(BaseModel):
|
||||
filename: str
|
||||
|
||||
class MoveRequest(BaseModel):
|
||||
source: str
|
||||
destination: str
|
||||
|
||||
|
||||
# ---------------------- Routes ----------------------
|
||||
@app.get("/", include_in_schema=False)
|
||||
@@ -362,6 +369,7 @@ async def get_odoo_log_summary(uuid: str):
|
||||
re.compile(r"ERROR"), # Errors
|
||||
re.compile(r"WARNING"), # Warnings
|
||||
re.compile(r"Traceback"), # Tracebacks
|
||||
re.compile(r"Error"),
|
||||
]
|
||||
|
||||
def is_important_line(line: str) -> bool:
|
||||
@@ -396,6 +404,32 @@ async def get_odoo_log_summary(uuid: str):
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Error reading log files: {e}")
|
||||
|
||||
# ------------------------ BACKUP HANDLING -------------------------------------
|
||||
@app.post("/backup/import", dependencies=[Depends(verify_api_key)])
|
||||
def backup_import(request: ImportRequest):
|
||||
if not request.filename:
|
||||
raise HTTPException(status_code=400, detail="Filename is required")
|
||||
|
||||
command = [f"{BIN_PATH}/ODOO_19/import", request.filename]
|
||||
output = run_command(command)
|
||||
return {"message": output}
|
||||
|
||||
@app.post("/backup/move", dependencies=[Depends(verify_api_key)])
|
||||
def backup_move(request: MoveRequest):
|
||||
if not request.source or not request.destination:
|
||||
raise HTTPException(status_code=400, detail="Source and destination are required")
|
||||
|
||||
if not os.path.exists(request.source):
|
||||
raise HTTPException(status_code=404, detail="Source file does not exist")
|
||||
|
||||
# Use shell command to move the file
|
||||
command = ["mv", request.source, request.destination] # Linux/macOS
|
||||
# For Windows, use: command = ["move", request.source, request.destination]
|
||||
|
||||
output = run_command(command)
|
||||
return {"message": f"Moved {request.source} to {request.destination}", "output": output}
|
||||
|
||||
|
||||
# ---------------------- Entry Point ----------------------
|
||||
if __name__ == "__main__":
|
||||
print(VERSION)
|
||||
|
||||
@@ -58,24 +58,30 @@ RULE="${RULE# || }"
|
||||
DOMAIN_LABEL="traefik.http.routers.$UUID.rule=$RULE"
|
||||
echo "[DEBUG] Final Traefik label: $DOMAIN_LABEL"
|
||||
|
||||
doas docker exec "$UUID" mkdir -p /var/lib/odoo/.local/share/Odoo/
|
||||
doas docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore
|
||||
docker exec "$UUID" mkdir -p /var/lib/odoo/.local/share/Odoo/
|
||||
docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore
|
||||
|
||||
|
||||
doas find "$BASEURL" -type d -exec chmod 777 {} \;
|
||||
find "$BASEURL" -type d -exec chmod 777 {} \;
|
||||
PORT=$((CONTAINERDBID + 2200))
|
||||
echo "PORT $PORT"
|
||||
chmod 777 $ETC_DIR
|
||||
chmod 77 $ETC_DIR/gitpath
|
||||
echo "git clone \"ssh://git@${UUID}.odoo4projects.com:${PORT}/git-server/repos/odoo.git\"" > ${ETC_DIR}/gitpath
|
||||
echo "GIIIT $ETC_DIR $PORT"
|
||||
mkdir -p ${ETC_DIR}
|
||||
echo "GITPATH ${ETC_DIR}gitpath"
|
||||
touch ${ETC_DIR}gitpath
|
||||
|
||||
doas docker stop "$UUID" 2>/dev/null
|
||||
doas docker rm "$UUID" 2>/dev/null
|
||||
mkdir -p ${GIT_DIR}keys
|
||||
touch ${GIT_DIR}keys/id_rsa.pub
|
||||
|
||||
|
||||
echo "git clone \"ssh://git@${UUID}.odoo4projects.com:${PORT}/git-server/repos/odoo.git\"" > "${ETC_DIR}/gitpath"
|
||||
|
||||
|
||||
docker stop "$UUID" 2>/dev/null
|
||||
docker rm "$UUID" 2>/dev/null
|
||||
|
||||
EXTRA_DOCKER_PARAMETER=""
|
||||
|
||||
doas docker run -d --name "$UUID" \
|
||||
docker run -d --name "$UUID" \
|
||||
--network 4server_4projects \
|
||||
--restart=always \
|
||||
$EXTRA_DOCKER_PARAMETER \
|
||||
@@ -107,12 +113,15 @@ doas docker run -d --name "$UUID" \
|
||||
--label "traefik.http.routers.$UUID.service=$UUID" \
|
||||
docker.odoo4projects.com/4projects/odoo_17:$BRANCH
|
||||
|
||||
doas docker exec "$UUID" rm /var/lib/odoo/.local/share/Odoo/filestore
|
||||
doas docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore
|
||||
docker exec "$UUID" mkdir -p /var/lib/odoo/.local/share/Odoo
|
||||
docker exec "$UUID" rm -rf /var/lib/odoo/.local/share/Odoo/filestore
|
||||
docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore
|
||||
|
||||
doas docker exec $UUID chown -R odoo:odoo /home/odoo/.local
|
||||
doas docker exec $UUID chown -R odoo:odoo /mnt/*
|
||||
doas docker exec $UUID chown -R odoo:odoo /var/lib/odoo/.local/share/Odoo
|
||||
|
||||
docker exec $UUID chown -R odoo:odoo /home/odoo/.local
|
||||
docker exec $UUID chown -R odoo:odoo /var/lib/odoo/.local/share/Odoo
|
||||
docker exec $UUID chown -R odoo:odoo /mnt/*
|
||||
docker exec $UUID chown odoo:odoo /git-server/keys/id_rsa.pub
|
||||
|
||||
|
||||
check_and_create_db
|
||||
|
||||
@@ -58,24 +58,30 @@ RULE="${RULE# || }"
|
||||
DOMAIN_LABEL="traefik.http.routers.$UUID.rule=$RULE"
|
||||
echo "[DEBUG] Final Traefik label: $DOMAIN_LABEL"
|
||||
|
||||
doas docker exec "$UUID" mkdir -p /var/lib/odoo/.local/share/Odoo/
|
||||
doas docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore
|
||||
docker exec "$UUID" mkdir -p /var/lib/odoo/.local/share/Odoo/
|
||||
docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore
|
||||
|
||||
|
||||
doas find "$BASEURL" -type d -exec chmod 777 {} \;
|
||||
find "$BASEURL" -type d -exec chmod 777 {} \;
|
||||
PORT=$((CONTAINERDBID + 2200))
|
||||
echo "PORT $PORT"
|
||||
chmod 777 $ETC_DIR
|
||||
chmod 77 $ETC_DIR/gitpath
|
||||
echo "git clone \"ssh://git@${UUID}.odoo4projects.com:${PORT}/git-server/repos/odoo.git\"" > ${ETC_DIR}/gitpath
|
||||
echo "GIIIT $ETC_DIR $PORT"
|
||||
mkdir -p ${ETC_DIR}
|
||||
echo "GITPATH ${ETC_DIR}gitpath"
|
||||
touch ${ETC_DIR}gitpath
|
||||
|
||||
doas docker stop "$UUID" 2>/dev/null
|
||||
doas docker rm "$UUID" 2>/dev/null
|
||||
mkdir -p ${GIT_DIR}keys
|
||||
touch ${GIT_DIR}keys/id_rsa.pub
|
||||
|
||||
|
||||
echo "git clone \"ssh://git@${UUID}.odoo4projects.com:${PORT}/git-server/repos/odoo.git\"" > "${ETC_DIR}/gitpath"
|
||||
|
||||
|
||||
docker stop "$UUID" 2>/dev/null
|
||||
docker rm "$UUID" 2>/dev/null
|
||||
|
||||
EXTRA_DOCKER_PARAMETER=""
|
||||
|
||||
doas docker run -d --name "$UUID" \
|
||||
docker run -d --name "$UUID" \
|
||||
--network 4server_4projects \
|
||||
--restart=always \
|
||||
$EXTRA_DOCKER_PARAMETER \
|
||||
@@ -107,10 +113,15 @@ doas docker run -d --name "$UUID" \
|
||||
--label "traefik.http.routers.$UUID.service=$UUID" \
|
||||
docker.odoo4projects.com/4projects/odoo_18:$BRANCH
|
||||
|
||||
docker exec "$UUID" mkdir -p /var/lib/odoo/.local/share/Odoo
|
||||
docker exec "$UUID" rm -rf /var/lib/odoo/.local/share/Odoo/filestore
|
||||
docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore
|
||||
|
||||
doas docker exec $UUID chown -R odoo:odoo /home/odoo/.local
|
||||
doas docker exec $UUID chown -R odoo:odoo /mnt/*
|
||||
|
||||
docker exec $UUID chown -R odoo:odoo /home/odoo/.local
|
||||
docker exec $UUID chown -R odoo:odoo /var/lib/odoo/.local/share/Odoo
|
||||
docker exec $UUID chown -R odoo:odoo /mnt/*
|
||||
docker exec $UUID chown odoo:odoo /git-server/keys/id_rsa.pub
|
||||
|
||||
|
||||
check_and_create_db
|
||||
|
||||
@@ -60,22 +60,26 @@ echo "[DEBUG] Final Traefik label: $DOMAIN_LABEL"
|
||||
|
||||
|
||||
|
||||
doas find "$BASEURL" -type d -exec chmod 777 {} \;
|
||||
find "$BASEURL" -type d -exec chmod 777 {} \;
|
||||
PORT=$((CONTAINERDBID + 2200))
|
||||
echo "PORT $PORT"
|
||||
mkdir -p ${ETC_DIR}
|
||||
echo "GITPATH ${ETC_DIR}gitpath"
|
||||
touch ${ETC_DIR}gitpath
|
||||
|
||||
mkdir -p ${GIT_DIR}keys
|
||||
touch ${GIT_DIR}keys/id_rsa.pub
|
||||
|
||||
|
||||
echo "git clone \"ssh://git@${UUID}.odoo4projects.com:${PORT}/git-server/repos/odoo.git\"" > "${ETC_DIR}/gitpath"
|
||||
|
||||
|
||||
doas docker stop "$UUID" 2>/dev/null
|
||||
doas docker rm "$UUID" 2>/dev/null
|
||||
docker stop "$UUID" 2>/dev/null
|
||||
docker rm "$UUID" 2>/dev/null
|
||||
|
||||
EXTRA_DOCKER_PARAMETER=""
|
||||
|
||||
doas docker run -d --name "$UUID" \
|
||||
docker run -d --name "$UUID" \
|
||||
--network 4server_4projects \
|
||||
--restart=always \
|
||||
$EXTRA_DOCKER_PARAMETER \
|
||||
@@ -108,9 +112,9 @@ doas docker run -d --name "$UUID" \
|
||||
docker.odoo4projects.com/4projects/odoo_19:$BRANCH
|
||||
|
||||
|
||||
doas docker exec $UUID chown -R odoo:odoo /home/odoo/.local
|
||||
doas docker exec $UUID chown -R odoo:odoo /mnt/*
|
||||
|
||||
|
||||
docker exec $UUID chown -R odoo:odoo /home/odoo/.local
|
||||
docker exec $UUID chown -R odoo:odoo /mnt/*
|
||||
docker exec $UUID chown odoo:odoo /git-server/keys/id_rsa.pub
|
||||
chmod 777 /4server/data/$UUID/cc
|
||||
|
||||
check_and_create_db
|
||||
|
||||
@@ -7,10 +7,11 @@ HOSTNAME=$(hostname)
|
||||
|
||||
mkdir -p /4server/data/${UUID}/n8n
|
||||
mkdir -p /4server/data/${UUID}/data
|
||||
mkdir -p /4server/data/${UUID}/backup
|
||||
|
||||
chmod 777 /4server/data/${UUID}/n8n
|
||||
chmod 777 /4server/data/${UUID}/data
|
||||
|
||||
chmod 777 /4server/data/${UUID}/backup
|
||||
|
||||
# Stop the container if it exists
|
||||
if docker ps -a --format '{{.Names}}' | grep -q "^${UUID}$"; then
|
||||
@@ -35,6 +36,7 @@ docker run -d \
|
||||
-e GENERIC_TIMEZONE="UTC-3" \
|
||||
-e N8N_CUSTOM_EXTENSIONS="/usr/local/share/n8n/custom" \
|
||||
-v "/4server/data/${UUID}/n8n:/home/node/.n8n" \
|
||||
-v "/4server/data/${UUID}/backup:/data" \
|
||||
-v "/4server/data/${UUID}/backup:/backup" \
|
||||
--label "traefik.enable=true" \
|
||||
--label "traefik.http.routers.${UUID}.rule=Host(\`${UUID}.odoo4projects.com\`)" \
|
||||
|
||||
Reference in New Issue
Block a user