Merge branch 'master' of github.com:flamingcowtv/cosmopolite

This commit is contained in:
Ian Gulliver
2015-06-20 05:45:39 +00:00
3 changed files with 47 additions and 4 deletions

2
api.py
View File

@@ -75,7 +75,7 @@ def Poll(google_user, client, client_address, instance_id, args):
return { return {
'result': 'ok', 'result': 'ok',
'new': instance.newly_created, 'instance_generation': instance.generation,
'events': events, 'events': events,
} }

40
cron.py Normal file
View File

@@ -0,0 +1,40 @@
# Copyright 2014, Ian Gulliver
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import datetime
import logging
import webapp2
from cosmopolite.lib import models
from cosmopolite.lib import utils
import config
class CleanupPollingInstances(webapp2.RequestHandler):
@utils.local_namespace
def get(self):
cutoff = datetime.datetime.now() - datetime.timedelta(minutes=1)
query = (
models.Instance.all()
.filter('polling =', True)
.filter('last_poll <', cutoff))
for instance in query:
instance.Delete()
app = webapp2.WSGIApplication([
(config.URL_PREFIX + '/cron/cleanup_polling_instances', CleanupPollingInstances),
])

View File

@@ -18,6 +18,7 @@ import hashlib
import logging import logging
import random import random
import struct import struct
import uuid
from google.appengine.api import channel from google.appengine.api import channel
from google.appengine.api import users from google.appengine.api import users
@@ -95,6 +96,7 @@ class Instance(db.Model):
active = db.BooleanProperty(required=True, default=False) active = db.BooleanProperty(required=True, default=False)
polling = db.BooleanProperty(required=True, default=False) polling = db.BooleanProperty(required=True, default=False)
last_poll = db.DateTimeProperty(required=True, auto_now=True) last_poll = db.DateTimeProperty(required=True, auto_now=True)
generation = db.StringProperty(required=True)
@classmethod @classmethod
def FromID(cls, instance_id): def FromID(cls, instance_id):
@@ -107,11 +109,12 @@ class Instance(db.Model):
def _FindOrCreate(): def _FindOrCreate():
entity = cls.get_by_key_name(instance_id) entity = cls.get_by_key_name(instance_id)
if entity: if entity:
entity.newly_created = False
return entity return entity
entity = cls(key_name=instance_id, **kwargs) entity = cls(
key_name=instance_id,
generation=str(uuid.uuid4()),
**kwargs)
entity.put() entity.put()
entity.newly_created = True
return entity return entity
return db.run_in_transaction(_FindOrCreate) return db.run_in_transaction(_FindOrCreate)