Javascript 和 Python 增加内置函数 QLAPI.notify

This commit is contained in:
whyour 2024-07-21 01:15:16 +08:00
parent 1b39d3ab48
commit eb5cc3943d
8 changed files with 42 additions and 15 deletions

1
.gitignore vendored
View File

@ -25,3 +25,4 @@
/.tmp /.tmp
__pycache__ __pycache__
/shell/preload/env.* /shell/preload/env.*
/shell/preload/notify.*

View File

@ -41,6 +41,8 @@ const systemLogPath = path.join(dataPath, 'syslog/');
const envFile = path.join(preloadPath, 'env.sh'); const envFile = path.join(preloadPath, 'env.sh');
const jsEnvFile = path.join(preloadPath, 'env.js'); const jsEnvFile = path.join(preloadPath, 'env.js');
const pyEnvFile = path.join(preloadPath, 'env.py'); const pyEnvFile = path.join(preloadPath, 'env.py');
const jsNotifyFile = path.join(preloadPath, 'notify.js');
const pyNotifyFile = path.join(preloadPath, 'notify.py');
const confFile = path.join(configPath, 'config.sh'); const confFile = path.join(configPath, 'config.sh');
const crontabFile = path.join(configPath, 'crontab.list'); const crontabFile = path.join(configPath, 'crontab.list');
const authConfigFile = path.join(configPath, 'auth.json'); const authConfigFile = path.join(configPath, 'auth.json');
@ -92,6 +94,8 @@ export default {
envFile, envFile,
jsEnvFile, jsEnvFile,
pyEnvFile, pyEnvFile,
jsNotifyFile,
pyNotifyFile,
dbPath, dbPath,
uploadPath, uploadPath,
configPath, configPath,

View File

@ -28,6 +28,8 @@ const sampleNotifyJsFile = path.join(samplePath, 'notify.js');
const sampleNotifyPyFile = path.join(samplePath, 'notify.py'); const sampleNotifyPyFile = path.join(samplePath, 'notify.py');
const scriptNotifyJsFile = path.join(scriptPath, 'sendNotify.js'); const scriptNotifyJsFile = path.join(scriptPath, 'sendNotify.js');
const scriptNotifyPyFile = path.join(scriptPath, 'notify.py'); const scriptNotifyPyFile = path.join(scriptPath, 'notify.py');
const jsNotifyFile = path.join(preloadPath, 'notify.js');
const pyNotifyFile = path.join(preloadPath, 'notify.py');
const TaskBeforeFile = path.join(configPath, 'task_before.sh'); const TaskBeforeFile = path.join(configPath, 'task_before.sh');
const TaskAfterFile = path.join(configPath, 'task_after.sh'); const TaskAfterFile = path.join(configPath, 'task_after.sh');
const homedir = os.homedir(); const homedir = os.homedir();
@ -102,6 +104,9 @@ export default async () => {
await fs.writeFile(confFile, await fs.readFile(sampleConfigFile)); await fs.writeFile(confFile, await fs.readFile(sampleConfigFile));
} }
await fs.writeFile(jsNotifyFile, await fs.readFile(sampleNotifyJsFile));
await fs.writeFile(pyNotifyFile, await fs.readFile(sampleNotifyPyFile));
if (!scriptNotifyJsFileExist) { if (!scriptNotifyJsFileExist) {
await fs.writeFile( await fs.writeFile(
scriptNotifyJsFile, scriptNotifyJsFile,

View File

@ -4,8 +4,6 @@
* 定时规则 * 定时规则
* cron: 1 9 * * * * cron: 1 9 * * *
*/ */
const { sendNotify } = require('./sendNotify.js'); // commonjs
// import { sendNotify } from './sendNotify'; // es6
console.log('test scripts'); console.log('test scripts');
sendNotify('test scripts', 'test desc'); QLAPI.notify('test scripts', 'test desc');
console.log('test desc');

View File

@ -4,7 +4,6 @@ name: script name
定时规则 定时规则
cron: 1 9 * * * cron: 1 9 * * *
""" """
import notify
print("test script") print("test script")
notify.send('test script', 'test desc') QLAPI.notify('test script', 'test desc')
print("test desc")

View File

@ -1,6 +1,13 @@
const { execSync } = require('child_process'); const { execSync } = require('child_process');
const { sendNotify } = require('./notify.js');
require(`./env.js`); require(`./env.js`);
function initGlobal() {
global.QLAPI = {
notify: sendNotify,
};
}
function expandRange(rangeStr, max) { function expandRange(rangeStr, max) {
const tempRangeStr = rangeStr const tempRangeStr = rangeStr
.trim() .trim()
@ -19,6 +26,7 @@ function expandRange(rangeStr, max) {
function run() { function run() {
try { try {
// TODO: big size
const splitStr = '__sitecustomize__'; const splitStr = '__sitecustomize__';
let command = `bash -c "source ${process.env.taskBefore} ${process.env.fileName}`; let command = `bash -c "source ${process.env.taskBefore} ${process.env.fileName}`;
if (process.env.task_before) { if (process.env.task_before) {
@ -31,17 +39,17 @@ function run() {
}, },
); );
const [output, envStr] = res.split(splitStr); const [output, envStr] = res.split(splitStr);
const json = JSON.parse(envStr.trim()); const newEnvObject = JSON.parse(envStr.trim());
for (const key in json) { for (const key in newEnvObject) {
process.env[key] = json[key]; process.env[key] = newEnvObject[key];
} }
console.log(output); console.log(output);
} catch (error) { } catch (error) {
console.log(`run task before error `, error); console.log(`run task before error: `, error.message);
} }
if (process.env.envParam && process.env.numParam) { const { envParam, numParam } = process.env;
const { envParam, numParam } = process.env; if (envParam && numParam) {
const array = (process.env[envParam] || '').split('&'); const array = (process.env[envParam] || '').split('&');
const runArr = expandRange(numParam, array.length); const runArr = expandRange(numParam, array.length);
const arrayRun = runArr.map((i) => array[i - 1]); const arrayRun = runArr.map((i) => array[i - 1]);
@ -50,4 +58,5 @@ function run() {
} }
} }
initGlobal();
run(); run();

View File

@ -3,6 +3,18 @@ import re
import env import env
import subprocess import subprocess
import json import json
import builtins
from notify import send
class BaseApi:
def notify(self, *args, **kwargs):
return send(*args, **kwargs)
def init_global():
QLAPI = BaseApi()
builtins.QLAPI = QLAPI
def try_parse_int(value): def try_parse_int(value):
@ -66,4 +78,5 @@ def run():
os.environ[env_param] = env_str os.environ[env_param] = env_str
init_global()
run() run()

View File

@ -27,8 +27,6 @@ ql_static_repo=$dir_repo/static
## 文件 ## 文件
file_config_sample=$dir_sample/config.sample.sh file_config_sample=$dir_sample/config.sample.sh
file_env=$dir_preload/env.sh file_env=$dir_preload/env.sh
js_file_env=$dir_preload/env.js
py_file_env=$dir_preload/env.py
preload_js_file=$dir_preload/sitecustomize.js preload_js_file=$dir_preload/sitecustomize.js
file_sharecode=$dir_config/sharecode.sh file_sharecode=$dir_config/sharecode.sh
file_config_user=$dir_config/config.sh file_config_user=$dir_config/config.sh