【HAVENT原创】Firebase 定时任务遍历删除子节点

每周定时执行,遍历 Firebase 数据库,删除过期的节点:

var config = require('./config.json');

var admin = require('firebase-admin');
var schedule = require('node-schedule');

var log4js = require('log4js');
log4js.configure({ // configure to use all types in different files.
    appenders: [
        {   type: 'file',
            filename: config.firebase.log,
            category: 'service',
            maxLogSize: 20480000,
            backups: 10
        }
    ]
});
var logger = log4js.getLogger('service');

var mysql = require('mysql');
var pool = mysql.createPool({
    connectionLimit: 10,
    host: config.mysql.host,
    user: config.mysql.user,
    password: config.mysql.password,
    database: config.mysql.db
});


var defaultAppConfig = {
    credential: admin.credential.cert(config.firebase.cert),
    databaseURL: config.firebase.databaseURL
};

var defaultAppName = 'GoPeople-NodeJS-Admin';
var defaultApp = admin.initializeApp(defaultAppConfig, defaultAppName);

var isWorking = false;
var hasMoreData = true;
function init() {
    logger.info('People Post remove signatures service start.');

    // '0 0 0 * * 6' Saturday 00:00:00
    // '*/5 * * * *' per 5 min
    // '*/30 * * * * *' per 30 sec
    var weekTask = schedule.scheduleJob('11 34 11 * * 2', function () {
        logger.info('schedule week task start!');

        var j = schedule.scheduleJob('*/30 * * * * *', function(){
            startRemoveSignatures();

            if(!hasMoreData){
                logger.info('schedule task finished!');
                logger.info();
                logger.info();
                schedule.cancelJob(j);
            }
        });
    });
}

function startRemoveSignatures() {
    var expiredDataCount = 0;

    if(isWorking){
        logger.info('startRemoveSignatures: hold on ...');
        return;
    }else{
        isWorking = true;
        logger.info();
        logger.info('startRemoveSignatures: loading signatures data ...');
    }

    var signaturesRef = defaultApp.database().ref('signatures');

    //signaturesRef.orderByChild("isChecked").equalTo(true).limitToLast(300).once("value")
    signaturesRef.orderByChild("timestamp").limitToFirst(50).once("value")
        .then(function(snapshot) {

            snapshot.forEach(function(childSnapshot) {
                var key = childSnapshot.key;
                var childData = childSnapshot.val();

                var now = new Date();
                var date = new Date(childData.date);
                var dayDiff = parseInt((now - date) / (1000 * 60 * 60 * 24)); // day diff

                if(dayDiff > 7){
                    expiredDataCount++;

                    signaturesRef.child(key).remove(function(error) {
                        console.log(key);
                        console.log(dayDiff);
                        console.log(error ? ("Uh oh! " + error) : "Success!");

                        logger.info(key);
                        if(error){
                            logger.error(error);
                        }else{
                            logger.info("Success! [ " + dayDiff + ' day ]');
                        }
                    });
                }else{
                    console.log(key);
                    console.log(dayDiff);

                    logger.info(key);
                    logger.info("Jump!");
                }
            });

            isWorking = false;
            logger.info('expiredDataCount: ' + expiredDataCount);

            if(expiredDataCount < 30){
                hasMoreData = false;
            }
        });
}

init();

 

转载于:https://my.oschina.net/u/943746/blog/1832913

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值