|
| 1 | +'use strict'; |
| 2 | + |
| 3 | +module.exports = { |
| 4 | + background_worker: background_worker, |
| 5 | +}; |
| 6 | + |
| 7 | +var _ = require('lodash'); |
| 8 | +var P = require('../util/promise'); |
| 9 | +var system_store = require('../server/stores/system_store'); |
| 10 | +var api = require('../api'); |
| 11 | +var dbg = require('../util/debug_module')(__filename); |
| 12 | + |
| 13 | + |
| 14 | +var rpc = api.new_rpc(); |
| 15 | +var rpc_client = rpc.new_client(); |
| 16 | + |
| 17 | +//TODO: remove!!! handle BG RPC better asap |
| 18 | +var S3Auth = require('aws-sdk/lib/signers/s3'); |
| 19 | +var s3 = new S3Auth(); |
| 20 | + |
| 21 | + |
| 22 | + |
| 23 | +var LIFECYCLE = { |
| 24 | + schedule_min: 5 //run every 5 minutes |
| 25 | +}; |
| 26 | + |
| 27 | +/* |
| 28 | + *************** Cloud Sync Background Worker & Other Eports |
| 29 | + */ |
| 30 | +function background_worker() { |
| 31 | + return P.fcall(function() { |
| 32 | + dbg.log0('LIFECYCLE READ BUCKETS configuration:', 'BEGIN'); |
| 33 | + return system_store.refresh() |
| 34 | + .then(function() { |
| 35 | + //TODO: |
| 36 | + //Replace asap with bg call |
| 37 | + dbg.log0('sys store', system_store.data.accounts[1]); |
| 38 | + |
| 39 | + var basic_auth_params = { |
| 40 | + system: system_store.data.systems[0].name, |
| 41 | + role: 'admin' |
| 42 | + }; |
| 43 | + var secret_key = system_store.data.accounts[1].access_keys[0].secret_key; |
| 44 | + var auth_params_str = JSON.stringify(basic_auth_params); |
| 45 | + var signature = s3.sign(secret_key, auth_params_str); |
| 46 | + var auth_params = { |
| 47 | + access_key: system_store.data.accounts[1].access_keys[0].access_key, |
| 48 | + string_to_sign: auth_params_str, |
| 49 | + signature: signature, |
| 50 | + }; |
| 51 | + dbg.log0('create_access_key_auth', auth_params); |
| 52 | + return rpc_client.create_access_key_auth(auth_params); |
| 53 | + }) |
| 54 | + .then(function() { |
| 55 | + _.each(system_store.data.buckets, function(bucket, i) { |
| 56 | + if (!bucket.lifecycle_configuration_rules) { |
| 57 | + return; |
| 58 | + } |
| 59 | + P.all(_.map(bucket.lifecycle_configuration_rules, function(lifecycle_rule, i) { |
| 60 | + dbg.log0('LIFECYCLE HANDLING BUCKET:', bucket.name, 'BEGIN'); |
| 61 | + var now = Date.now(); |
| 62 | + //If refresh time |
| 63 | + if (!lifecycle_rule.last_sync) { |
| 64 | + dbg.log0('LIFECYCLE HANDLING bucket:', bucket.name, 'rule id', lifecycle_rule.id, 'status:', lifecycle_rule.status, ' setting yesterday time'); |
| 65 | + lifecycle_rule.last_sync = now - 1000 * 60 * 60 * 24; //set yesterday as last sync |
| 66 | + } |
| 67 | + dbg.log0('LIFECYCLE HANDLING bucket:', bucket.name, 'rule id(', i, ')', lifecycle_rule.id, 'status:', lifecycle_rule.status, 'last_sync', Math.floor((now - lifecycle_rule.last_sync) / 1000 / 60), 'min ago.'); |
| 68 | + |
| 69 | + if ((lifecycle_rule.status === 'Enabled') && |
| 70 | + ((now - lifecycle_rule.last_sync) / 1000 / 60 > LIFECYCLE.schedule_min)) { |
| 71 | + dbg.log0('LIFECYCLE PROCESSING bucket:', bucket.name, 'rule id(', i, ')', lifecycle_rule.id); |
| 72 | + if ((lifecycle_rule.expiration.days === 0) || |
| 73 | + (lifecycle_rule.expiration.date < (new Date()).getTime())) { |
| 74 | + dbg.log0('LIFECYCLE DELETING bucket:', bucket.name, 'rule id(', i, ')', lifecycle_rule.id); |
| 75 | + return P.when(rpc_client.object.delete_multiple_objects_by_prefix({ |
| 76 | + bucket: bucket.name, |
| 77 | + prefix: lifecycle_rule.prefix, |
| 78 | + }).then(function() { |
| 79 | + bucket.lifecycle_configuration_rules[i].last_sync = Date.now(); |
| 80 | + dbg.log0('LIFECYCLE Done bucket:', bucket.name, ' done deletion of objects per prefix ', lifecycle_rule.prefix, ' time:', bucket.lifecycle_configuration_rules[i].last_sync); |
| 81 | + })); |
| 82 | + } |
| 83 | + } else { |
| 84 | + dbg.log0('LIFECYCLE NOTHING bucket:', bucket.name, 'rule id', lifecycle_rule.id, ' nothing to do'); |
| 85 | + } |
| 86 | + })).then(() => { |
| 87 | + dbg.log('LIFECYCLE SYNC TIME bucket ', bucket.name, ' SAVE last sync', bucket.lifecycle_configuration_rules[0].last_sync); |
| 88 | + update_lifecycle_rules_last_sync(bucket, bucket.lifecycle_configuration_rules); |
| 89 | + }); |
| 90 | + }); |
| 91 | + }); |
| 92 | + }) |
| 93 | + .fail(function(error) { |
| 94 | + dbg.error('LIFECYCLE FAILED processing', error, error.stack); |
| 95 | + }) |
| 96 | + .then(function() { |
| 97 | + dbg.log0('LIFECYCLE:', 'END'); |
| 98 | + return; |
| 99 | + }); |
| 100 | +} |
| 101 | + |
| 102 | + |
| 103 | +function update_lifecycle_rules_last_sync(bucket, rules) { |
| 104 | + return system_store.make_changes({ |
| 105 | + update: { |
| 106 | + buckets: [{ |
| 107 | + _id: bucket._id, |
| 108 | + lifecycle_configuration_rules: rules |
| 109 | + }] |
| 110 | + } |
| 111 | + }); |
| 112 | +} |
0 commit comments