VimŸUnDoåKã¦ÕäN]ÛT(¼&L•*Ýk5ÁÏ«Ì6TcA³7œœœœWhG&T_ÐÿÿÿÿVÑVÎõ(var App = require('../lib/state/app.js')õõ5�_Ð'ÿÿÿÿVÑVÓõõ5�_Ð#ÿÿÿÿVÑVóõ(var App = require('../lib/state/app.js')5�_Ð#ÿÿÿÿVÑVôõ'var App = require('../lib/state/appjs')5�_Ð#ÿÿÿÿVÑVôõ&var App = require('../lib/state/apps')5�_Ð'ÿÿÿÿVÑVöõ,var settings = require('../lib/settings.js')5�_Ð'ÿÿÿÿVÑVöõ+var settings = require('../lib/settingsjs')5�_Ð 'ÿÿÿÿVÑVöõ*var settings = require('../lib/settingss')5�_Ð (ÿÿÿÿVÑVýõ õ 5�_Ð *ÿÿÿÿVÑW õ 5var proxyClient = require('../lib/proxy').ProxyClient5�_Ð ÿÿÿÿVÑWõ! õ 5�_Ð ÿÿÿÿVÑW1õ"õ!5�_Ð  ÿÿÿÿVÑW‰õ $võ #õ "5�_Ð $ÿÿÿÿVÑWš õ# }, 300000)5�_Ð(ÿÿÿÿ(8v8VÑW¡ õ$9 var cullTimeout = app.cullTimeout || 60 * 60 * 10005�_Ð'ÿÿÿÿ(8v8VÑW£ õ$( var cullTimeout = app.cullTimeout 5�_Ð$ÿÿÿÿ(8v8VÑW© õ$5�_ÐÿÿÿÿVÑXoõ& }õ%5�_ÐÿÿÿÿVÑX­õ( }õ' õ&5�_ÐÿÿÿÿVÑX²õ) õ(5�_ÐÿÿÿÿVÑX¸õ) if (err) {7logger.error('could not cleanup apps: {0}'.format(err))õ)= logger.error('could not cleanup apps: {0}'.format(err))5�_ÐÿÿÿÿVÑX¹ õ }5�_ÐÿÿÿÿVÑX¼õ' if (err) { logger.error(õ' logger.error(5�_ÐÿÿÿÿVÑXÁõ }5�_ÐÿÿÿÿVÑXÂõ% if (err) logger.error(5�_ÐEÿÿÿÿVÑXÊõ%5�_ÐÿÿÿÿVÑXÎõ5�_ÐÿÿÿÿVÑXÑõ })5�_Ðÿÿÿÿ"vVÑXÔõ#$+ async.each(apps, function (app, next) { var now = new Date()' var cullTimeout = app.cullTimeoutE if (app.deployTime && ((now - app.deployTime) > cullTimeout)) {6 logger.info('culling app: {0}'.format(app.id))# app.remove(function (err) { return next(err) }) } }, function (err) { if (err) {? logger.error('could not cleanup apps: {0}'.format(err)) } })5�_Ð ÿÿÿÿ"vVÑYRõ$5�_Ð! ÿÿÿÿ#vVÑYUõ&õ%5�_Ð "!ÿÿÿÿ$vVÑYôõ' }õ&5�_Ð!#"ÿÿÿÿ%vVÑZõ( õ'5�_Ð"'#ÿÿÿÿ&vVÑ[jõ var match5�_Ð#($'ÿÿÿÿ%vVÑ[�õ'5�_Ð')(ÿÿÿÿ&vVÑ[¥õ- _.forEach(routes, function (_, route) {5�_Ð(*)ÿÿÿÿ%vVÑ[¥õ5�_Ð)+*ÿÿÿÿ$vVÑ[¦õ })5�_Ð*,+ÿÿÿÿ#vVÑ[·õ& õ%5�_Ð+-,ÿÿÿÿ$vVÑ[Àõ if (5�_Ð,.-ÿÿÿÿ#vVÑ[Æõ& õ%5�_Ð-/.ÿÿÿÿ$vVÑ\õ' }õ& if (app.lo5�_Ð.0/ÿÿÿÿ%vVÑ\õ( õ'5�_Ð/10 ÿÿÿÿ&vVÑ\!õ) }õ( }5�_Ð021ÿÿÿÿ'vVÑ\"õ* õ)5�_Ð132ÿÿÿÿ# vÿÿÿVÑ\¦õ*5�_Ð243ÿÿÿÿ$ vÿÿÿVÑ\¦õ"+õ+5�_Ð354ÿÿÿÿ!vVÑ\©õ"3  var now = new Date()) var cullTimeout = app.cullTimeoutG if (app.deployTime && ((now - app.deployTime) > cullTimeout)) {8 logger.info('culling app: {0}'.format(app.id))% app.remove(function (err) { return next(err) }) }5�_Ð465%ÿÿÿÿ%, vÿÿÿVÑ\­õ$&3  var now = new Date()) var cullTimeout = app.cullTimeoutG if (app.deployTime && ((now - app.deployTime) > cullTimeout)) {8 logger.info('culling app: {0}'.format(app.id))% app.remove(function (err) { return next(err) }) } }, function (err) {5�_Ð576!ÿÿÿÿ%% vÿÿÿVÑ\°õ !5�_Ð687 ÿÿÿÿ$$ vÿÿÿVÑ\Ìõ var now = new Date()5�_Ð798!ÿÿÿÿ!6v6VÑ\Òõ)I if (app.deployTime && ((now - app.deployTime) > cullTimeout)) {5�_Ð8:9 ÿÿÿÿ!6v6VÑ\Óõ)3 if (app.deployTime && ( > cullTimeout)) {5�_Ð9;: ÿÿÿÿ!6v6VÑ\Óõ)2 if (app.deployTime && > cullTimeout)) {5�_Ð:<;ÿÿÿÿ!6v6VÑ\Ôõ)1 if (app.deployTime && > cullTimeout)) {5�_Ð;=<?ÿÿÿÿ!6v6VÑ\Þõ)B if (app.deployTime && app.inactiveTime > cullTimeout)) {5�_Ð<>= ÿÿÿÿ!6v6VÑ\ãõ)A if (app.deployTime && app.inactiveTime > cullTimeout) {5�_Ð=?> ÿÿÿÿ!6v6VÑ]%õ!* }õ!) }5�_Ð>@? ÿÿÿÿ!6v6VÑ])õ ", }õ"+ õ!*5�_Ð?A@ ÿÿÿÿ!6v6VÑ]2õ "- õ ",5�_Ð@BA%ÿÿÿÿ!6v6VÑ]Bõ&(/ }õ%(. õ%'-5�_ÐACB& ÿÿÿÿ!6v6VÑ]Hõ&(0 õ&(/5�_ÐBDC'9ÿÿÿÿ!6v6VÑ]Sõ&(0J if (err) logger.error('could not save updated app: {0}'.format5�_ÐCED!;ÿÿÿÿ!6v6VÑ]Zõ "0R if (err) logger.error('could not save updated app: {0}'.format(err))5�_ÐDFE'Qÿÿÿÿ!6v6VÑ]_õ&(0Q if (err) logger.error('could not save updated active app: {0}'.format5�_ÐEGF( ÿÿÿÿ!6v6VÑ]xõ')0 }5�_ÐFHG ÿÿÿÿ!6v6VÑ]Šõ0B if (app.deployTime && (app.inactiveTime > cullTimeout) {5�_ÐGIH.ÿÿÿÿ!6v6VÑ]–õ-/0 })5�_ÐHJI, ÿÿÿÿ!6v6VÑ]¢õ*,0 if (err) {7logger.error('could not cleanup apps: {0}'.format(err))õ+-0A logger.error('could not cleanup apps: {0}'.format(err))5�_ÐIKJ,ÿÿÿÿ!6v6VÑ]¥õ+, }5�_ÐJLK+ ÿÿÿÿ!6v6VÑ]§õ+-/ õ+-.5�_ÐKMLÿÿÿÿVÒ’8 õ 0õ /5�_ÐLNMÿÿÿÿVÒ’Dõ1 õ05�_ÐMONÿÿÿÿVÒ’Kõ25�_ÐNPOÿÿÿÿ1vVÒ’[!õ22B if (err) logger.error('could not cleanup apps: {0}'.format(err))% App.find({}, function (err, apps) {D if (err) logger.error('could not cleanup apps: {0}'.format(err))% var proxy = proxyClient(settings)= proxy.getRoutes({ age: period }, function (err, routes) {F if (err) logger.error('could not cleanup apps: {0}'.format(err))- async.each(apps, function (app, next) {% if (app.location in routes) {$ app.inactiveTime += period+ var cullTimeout = app.cullTimeoutA if (app.deployTime && app.inactiveTime > cullTimeout) {: logger.info('culling app: {0}'.format(app.id))' app.remove(function (err) { return next(err) }) } else {& app._save(function (err) {[ if (err) logger.error('could not save updated inactive app: {0}'.format(err)) }) } } else { app.inactiveTime = 0$ app._save(function (err) {W if (err) logger.error('could not save updated active app: {0}'.format(err)) }) } }, function (err) {H if (err) logger.error('could not cleanup apps: {0}'.format(err)) }) }) })5�_ÐOQP1ÿÿÿÿ1vVÒ’^"õ133 õ1325�_ÐPRQÿÿÿÿ1vVÒ’b$õ4 õ35�_ÐQSRÿÿÿÿVÖô%õ5 õ45�_ÐRUS>ÿÿÿÿVÖ&õ6 õ55�_ÐSVTU&ÿÿÿÿVÖ'õ7 õ65�_ÐUWV@ÿÿÿÿVÖ,(õ7B console.log('app is inactive: ' + JSON.stringify(app))5�_ÐVXW&ÿÿÿÿVÖ3õ&(8 õ&(75�_ÐWYX)ÿÿÿÿVÖAõ8E console.log('app is inactive: ' + JSON.stringify(app.id))5�_ÐXZY.ÿÿÿÿVÖCõ8I console.log('app is inactive: {0} ' + JSON.stringify(app.id))5�_ÐY[Z,ÿÿÿÿVÖCõ8H console.log('app is inactive: {0} + JSON.stringify(app.id))5�_ÐZ\[-ÿÿÿÿVÖDõ8G console.log('app is inactive: {0 + JSON.stringify(app.id))5�_Ð[]\,ÿÿÿÿVÖEõ8H console.log('app is inactive: {0 } + JSON.stringify(app.id))5�_Ð\^]-ÿÿÿÿVÖFõ8G console.log('app is inactive: {0} + JSON.stringify(app.id))5�_Ð]_^.ÿÿÿÿVÖGõ8H console.log('app is inactive: {0}' + JSON.stringify(app.id))5�_Ð^`_.ÿÿÿÿVÖGõ8G console.log('app is inactive: {0}'+ JSON.stringify(app.id))5�_Ð_a`.ÿÿÿÿVÖGõ8F console.log('app is inactive: {0}' JSON.stringify(app.id))5�_Ð`ba.ÿÿÿÿVÖIõ8E console.log('app is inactive: {0}'JSON.stringify(app.id))5�_ÐacbMÿÿÿÿVÖJ*õ8M console.log('app is inactive: {0}'.format(JSON.stringify(app.id))5�_Ðbdc,ÿÿÿÿVÖ ìõ8F console.log('found the following apps: ' + JSON.stringify(apps))5�_Ðced0ÿÿÿÿVÖ îõ8J console.log('found the following apps: {0} ' + JSON.stringify(apps))5�_Ðdfe1ÿÿÿÿ14v4VÖ ïõ8I console.log('found the following apps: {0}' + JSON.stringify(apps))5�_Ðegf1ÿÿÿÿ14v4VÖ ðõ8E console.log('found the following apps: {0}'SON.stringify(apps))5�_Ðfhg9ÿÿÿÿ14v4VÖ õõ8M console.log('found the following apps: {0}'.format(SON.stringify(apps))5�_Ðgih&ÿÿÿÿ14v4VÖ ýõ9 õ85�_ÐhjiHÿÿÿÿ14v4VÖ ,õ9N console.log('found the following apps: {0}'.format(JSON.stringify(apps))5�_ÐikjMÿÿÿÿ14v4VÖ ".õ9M console.log('found the following apps: {0}'.format(JSON.stringify(ids))5�_Ðjlkÿÿÿÿ14v4VÖL/õ9< var ids = _.map(app, function (app) { return app.id })5�_ÐkmlÿÿÿÿVÖW0õ:õ95�_ÐlnmÿÿÿÿVÖk1õ:? proxy.getRoutes({ age: period }, function (err, routes) {5�_ÐmonÿÿÿÿVØ“ù3õ:H if (err) logger.error('could not cleanup apps: {0}'.format(err))5�_ÐnpoÿÿÿÿVØ“þ4õ:F if (err) logger.error('could not cleanup apps: {0}'.format(err))5�_Ðoqp+ÿÿÿÿVØ”õ*,:] if (err) logger.error('could not save updated inactive app: {0}'.format(err))5�_Ðprq1ÿÿÿÿVØ”õ02:Y if (err) logger.error('could not save updated active app: {0}'.format(err))5�_Ðqsr5ÿÿÿÿVØ” 6õ46:J if (err) logger.error('could not cleanup apps: {0}'.format(err))5�_ÐrtsÿÿÿÿVØ”7õ;õ:5�_Ðsut%ÿÿÿÿVØ”.9õ;0// TODO: rewrite the whole API using promises...5�_ÐtvuÿÿÿÿVßIXõ ;/ async.each(apps, function (app, next) {5�_ÐuwvÿÿÿÿVßIn;õ ;4 async.eachLimit(apps, function (app, next) {5�_Ðvxw ÿÿÿÿVß°—õ!;' if (app.location in routes) {5�_Ðwyx ÿÿÿÿVß°£<õ!; if (app._ in routes) {5�_ÐxzyÿÿÿÿVä›s=õN console.log('found the following apps: {0}'.format(JSON.stringify(ids)))5�_Ðy{zÿÿÿÿVä›xõM if (err) return logger.error('could not cleanup apps: {0}'.format(err))5�_Ðz|{ÿÿÿÿVä›yõ95�_Ð{}|ÿÿÿÿVä›yõ:õ:5�_Ð|~}ÿÿÿÿVä›z?õ5�_Ð}~ÿÿÿÿVäœ2õ!; õ!:5�_Ð~€!*ÿÿÿÿVäœ8õ!#< õ!#;5�_Ð�€ÿÿÿÿVäœZ@õ<' App.find({}, function (err, apps) {5�_Ѐ‚�"=ÿÿÿÿVäœjBõ!#<= console.log('inactiveTime: {0}, deployTime: {0}, 5�_Ð�ƒ‚-ÿÿÿÿVè€ Cõ-/= õ-/<5�_Ђ„ƒ4ÿÿÿÿVè€Gõ46> õ46=5�_Ѓ…„'ÿÿÿÿVèˆöIõ&(>) app.remove(function (err) {5�_Є‡…$ ÿÿÿÿVèÝõ#$- var cullTimeout = app.cullTimeout5�_Ð…‹†‡$5ÿÿÿÿVèÝ!Jõ#%=C if (app.deployTime && app.inactiveTime > cullTimeout) {5�_ЇŒˆ‹ ÿÿÿÿ  v Vñý“õ= var age = 605�_Ћ�Œ ÿÿÿÿ  v Vñý”õ=var period = 5 * 60 * 10005�_ÐŒŽ�ÿÿÿÿ  v Vñý•Oõ=var period = 12 * 60 * 10005�_Ð��Ž ÿÿÿÿWhFÞõ* if (app._location() in routes) {5�_ÐŽ��ÿÿÿÿWhFãPõ = õ <5�_Ð�‘�'ÿÿÿÿ''vWhG õ&(= return next(err)5�_Ð�’‘&ÿÿÿÿ''vWhG õ&(> õ&(=5�_Б“’'$ÿÿÿÿ((vWhGõ&(>* if (err) console.erro(err)5�_Ð’”“'$ÿÿÿÿ((vWhGõ&(>+ if (err) console.errro(err)5�_Г•”'%ÿÿÿÿ((vWhGQõ&(>* if (err) console.erro(err)5�_Д–•1 ÿÿÿÿ((vWhGõ01 } else {5�_Е—–1 ÿÿÿÿ((vWhGõ01 app.inactiveTime = 05�_Ж˜—1 ÿÿÿÿ((vWhGõ01& app._save(function (err) {5�_З™˜1ÿÿÿÿ((vWhGõ01` if (err) return logger.error('could not save updated active app: {0}'.format(err))5�_Иš™1ÿÿÿÿ((vWhGõ01 return next(err)5�_Й›š1 ÿÿÿÿ((vWhG õ01 })5�_Кœ›1 ÿÿÿÿ((vWhG Rõ01 }5�_Лœÿÿÿÿ0vWhG%Tõ174 app.inactiveTime = app.inactiveTime || 0+ console.log('****************')N console.log('app is inactive: {0}'.format(JSON.stringify(app.id)))‰ console.log('inactiveTime: {0}, deployTime: {1}, cullTimeout: {2}'.format(app.inactiveTime, app.deployTime, app.cullTimeout))& app.inactiveTime += periodG if (app.deployTime && app.inactiveTime > app.cullTimeout) {< logger.info('culling app: {0}'.format(app.id))* app._delete(function (err) {+ if (err) console.error(err) return next() }) } else {S console.log('app was inactive, but not removing: {0}'.format(app.id))( app._save(function (err) {d if (err) return logger.error('could not save updated inactive app: {0}'.format(err)) return next(err) }) }5�_Ї‰‹ˆ ÿÿÿÿ  v Vñý€Kõ= var age = 55�_ÐˆŠ‰ ÿÿÿÿ  v Vñý‹Lõ=var period = 1 * 60 * 10005�_ЉŠ ÿÿÿÿ  v Vñý�Mõ= var age = 15�_Ð…‡†$5ÿÿÿÿVèÝ õ#%=: if (app.deployTime && app.inactiveTime > ap) {5�_ÐSUT.ÿÿÿÿVÖõ6 õ7 c5�_Ð#%'$ÿÿÿÿ%vVÑ[mõ', _.filter(routes, function (_, route) {5�_Ð$&%ÿÿÿÿ%vVÑ[rõ'. _.filter(routes, , function (_, route) {5�_Ð%&ÿÿÿÿ%vVÑ[uõ'. _.filter(routes, , function (_, route) {5�_ÐÿÿÿÿVÑX¿õ5�çª