103 lines
2.6 KiB
JavaScript
103 lines
2.6 KiB
JavaScript
// 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
|
||
};
|