guanghulab/dingtalk-bot/sync/sync-to-github.js
2026-05-10 13:12:44 +08:00

103 lines
2.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// GitHub 同步模块 · sync-to-github.js
// 钉钉 → GitHub (SYSLOG归档 + 广播归档)
// HoloLake · M-DINGTALK Phase 3
//
const fs = require('fs');
const path = require('path');
// GitHub归档目录本地后续通过git push同步到远程
const ARCHIVE_BASE = path.join(__dirname, '..', 'archive');
const SYSLOG_ARCHIVE = path.join(ARCHIVE_BASE, 'syslog');
const BROADCAST_ARCHIVE = path.join(ARCHIVE_BASE, 'broadcast');
// 确保归档目录存在
function ensureDirs() {
[ARCHIVE_BASE, SYSLOG_ARCHIVE, BROADCAST_ARCHIVE].forEach(dir => {
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
});
}
/**
* 归档SYSLOG到本地准备git push
*/
async function archiveSyslog(syslogData) {
ensureDirs();
const filename = `${syslogData.session_id || 'unknown'}_${Date.now()}.json`;
const filePath = path.join(SYSLOG_ARCHIVE, filename);
const archiveData = {
...syslogData,
archived_at: new Date().toISOString(),
archived_by: 'M-DINGTALK-Phase3-SyncEngine'
};
fs.writeFileSync(filePath, JSON.stringify(archiveData, null, 2), 'utf-8');
console.log(`[GitHub Sync] SYSLOG已归档: ${filename}`);
return {
status: 'success',
file: filename,
path: filePath
};
}
/**
* 归档广播到本地
*/
async function archiveBroadcast(broadcastData) {
ensureDirs();
const filename = `${broadcastData.bc_id || 'unknown'}_${Date.now()}.json`;
const filePath = path.join(BROADCAST_ARCHIVE, filename);
const archiveData = {
...broadcastData,
archived_at: new Date().toISOString(),
archived_by: 'M-DINGTALK-Phase3-SyncEngine'
};
fs.writeFileSync(filePath, JSON.stringify(archiveData, null, 2), 'utf-8');
console.log(`[GitHub Sync] 广播已归档: ${filename}`);
return {
status: 'success',
file: filename
};
}
/**
* 执行完整同步准备所有数据供git push
*/
async function sync() {
ensureDirs();
// 统计归档文件
const syslogFiles = fs.existsSync(SYSLOG_ARCHIVE)
? fs.readdirSync(SYSLOG_ARCHIVE).filter(f => f.endsWith('.json'))
: [];
const broadcastFiles = fs.existsSync(BROADCAST_ARCHIVE)
? fs.readdirSync(BROADCAST_ARCHIVE).filter(f => f.endsWith('.json'))
: [];
console.log(`[GitHub Sync] SYSLOG归档: ${syslogFiles.length} 个文件`);
console.log(`[GitHub Sync] 广播归档: ${broadcastFiles.length} 个文件`);
return {
status: 'success',
syslogCount: syslogFiles.length,
broadcastCount: broadcastFiles.length,
message: '本地归档就绪等待git push'
};
}
module.exports = {
archiveSyslog,
archiveBroadcast,
sync
};