obcon-scada / app /modules /batch /MediaWikiDBToFile.js
chanmin0723's picture
Initial obcon SCADA deploy
e4bf523
Raw
History Blame Contribute Delete
6.62 kB
'use strict'
/**
* Copyright (c) 2017~2021, OBCon Inc.
* All rights reserved.
*/
/**
* @file
* @copyright 2017~2021, OBCon Inc.
* @author gye hyun james kim [pnuskgh@gmail.com]
*/
const Sequelize = require('sequelize');
const path = require('path');;
const fs = require('fs');
const Batch = utils.getClass('include', 'batch.js');
//--- node bin/cms_batch.js --conf config_batch_override.js
// conf['batch'] = {
// path: ['modules', 'batch', 'MediaWikiDBToFile.js'],
// options: {},
// waitTime: 1
// };
class MediaWikiDBToFile extends Batch {
constructor() {
super();
this._folder = 'C:/work/obcon/obcon/manual/service_cms_jopenbusiness/default/ko_KR/Jopenbusiness';
}
async batchJob(options = {}, callback) {
try {
const sequelize = new Sequelize(options.database, options.username, options.password, options);
let count = 0;
let save_page_id = -1;
let save_item = null;
for (let idx of [ 0, 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000 ]) {
// for (let idx of [ 600, 610 ]) {
let page_id_fr = idx;
let page_id_to = idx + 500;
// let page_id_to = idx + 20;
// let page_id_fr = 602;
// let page_id_to = 603;
//--- page_namespace : 0. 일반, 6. 파일, 10. 틀, 14. 분류
let query = `\
SELECT a.page_id, a.page_namespace, a.page_title, b.rev_id, b.rev_parent_id, c.old_id, c.old_text \
FROM jopen_page a, jopen_revision b, jopen_text c \
WHERE ${page_id_fr} <= a.page_id \
AND a.page_id < ${page_id_to} \
AND a.page_namespace IN (0, 10, 14) \
AND a.page_is_redirect = 0 \
AND b.rev_deleted = 0 \
AND a.page_id = b.rev_page \
AND b.rev_text_id = c.old_id \
ORDER BY a.page_namespace DESC, a.page_id ASC, b.rev_parent_id ASC`;
let data = await sequelize.query(query, { type: Sequelize.QueryTypes.SELECT, tableHint: Sequelize.TableHints.NOLOCK });
for (let item of data) {
// console.log(`Read ${item.page_namespace}, ${item.page_id}, ${item.page_title}, ${item.rev_parent_id}, ${item.old_id}`);
if (save_page_id == -1) {
save_page_id = item.page_id;
save_item = item;
// console.log(` save page_id : ${save_item.page_id}, ${save_item.rev_parent_id}`);
continue;
}
if (item.page_id != save_page_id) {
count = count + 1;
// console.log(`saveFile ${count} : ${save_item.page_namespace}, ${save_item.page_id}, ${save_item.page_title}, ${save_item.rev_parent_id}, ${save_item.old_id}`);
this.saveFile(count, save_item);
save_page_id = item.page_id;
save_item = item;
// console.log(` save page_id : ${save_item.page_id}, ${save_item.rev_parent_id}`);
} else {
// console.log(` Skip ${save_page_id} : ${save_item.page_namespace}, ${save_item.page_id}, ${save_item.page_title}, ${save_item.rev_parent_id}`);
save_item = item;
}
}
}
if (save_item != null) {
count = count + 1;
console.log(`saveFile ${count} : ${save_item.page_namespace}, ${save_item.page_id}, ${save_item.page_title}, ${save_item.old_id}`);
this.saveFile(count, save_item);
}
console.log('');
callback(0, 'ok');
} catch (error) {
console.log(error);
callback(101, JSON.stringify(error));
}
}
saveFile(count, item) {
let folder = null;
let filename = `${item.page_title}.mediawiki`;
if (-1 < filename.indexOf('/')) {
let data = filename.split('/');
switch (data.length) {
case 4:
folder = `${data[0]}/${data[1]}/${data[2]}`;
filename = data[3];
if ((folder != null) && (!fs.existsSync(path.join(this._folder, 'folderMediawiki', folder)))) {
fs.mkdirSync(path.join(this._folder, 'folderMediawiki', folder));
}
break;
case 3:
folder = `${data[0]}/${data[1]}`;
filename = data[2];
if ((folder != null) && (!fs.existsSync(path.join(this._folder, 'folderMediawiki', folder)))) {
fs.mkdirSync(path.join(this._folder, 'folderMediawiki', folder));
}
break;
default:
folder = data[0];
filename = data[1];
if ((folder != null) && (!fs.existsSync(path.join(this._folder, 'folderMediawiki', folder)))) {
fs.mkdirSync(path.join(this._folder, 'folderMediawiki', folder));
}
break;
}
}
switch (item.page_namespace) {
case 14: filename = `분류_${filename}`; break;
case 10: filename = `틀_${filename}`; break;
}
if (item.old_text == null) {
if (folder == null) {
console.log(`Makefile skip null : ${count}, ${item.page_title}.mediawiki, ${filename}`);
} else {
console.log(`Makefile skip null : ${count}, ${item.page_title}.mediawiki, ${folder}, ${filename}`);
}
} else {
if (folder == null) {
console.log(`Makefile : ${count}, ${item.page_title}.mediawiki, ${filename}`);
fs.writeFileSync(path.join(this._folder, 'folderMediawiki', filename), item.old_text,'utf-8');
} else {
console.log(`Makefile : ${count}, ${item.page_title}.mediawiki, ${folder}, ${filename}`);
fs.writeFileSync(path.join(this._folder, 'folderMediawiki', folder, filename), item.old_text,'utf-8');
}
}
}
}
module.exports = MediaWikiDBToFile;