Exemplo n.º 1
0
 def testDeviceTaskCreate(self):
     # Test that a DeviceTask can be created.
     device = model.DeviceInfo(key_name='mydevice')
     device.put()
     task = model.Task()
     task.tag = 'mytag'
     task.put()
     device_task = model.DeviceTask(key_name='mydevicetask')
     device_task.device_info = device
     device_task.task = task
     device_task.put()
     self.assertEqual(1, len(model.DeviceTask().all().fetch(2)))
     result = model.DeviceTask().get_by_key_name('mydevicetask')
     self.assertEqual(result.device_info.key().name(), 'mydevice')
     self.assertEqual(result.task.tag, 'mytag')
Exemplo n.º 2
0
def GetDeviceSchedule(device_properties):
    """Return entries from the global schedule that match this device."""

    matched = set()
    if not device_properties.device_info:
        return matched

    schedule = model.Task.all().filter("group =", None)
    for task in schedule:
        if task.matchDevice(device_properties.device_info.id):
            matched.add(task)

    # Un-assign all current tasks from this device
    for dt in device_properties.device_info.devicetask_set:
        dt.delete()

    # Assign matched tasks to this device
    for task in matched.union(
            smartScheduler.getDeviceSchedule(device_properties.device_info)):
        device_task = model.DeviceTask()
        device_task.task = task
        device_task.device_info = device_properties.device_info
        device_task.put()

    return matched
Exemplo n.º 3
0
def GetDeviceSchedule(device_properties):
    """Return entries from the global schedule that match this device."""

    matched = set()
    if not device_properties.device_info:
        return matched

    schedule = model.Task.all()
    for task in schedule:
        if not task.filter:
            try:
                app_version = float(device_properties.app_version[1:])
                if task.type != "tcpthroughput" or app_version > 2.0:
                    matched.add(task)
            except:
                matched.add(task)
        else:
            # Does the filter match this device?
            devices = []

            # Match against DeviceProperties
            try:
                matching_device_properties = model.DeviceProperties.gql(
                    'WHERE ' + task.filter)
                devices += [
                    dp.device_info for dp in matching_device_properties
                ]
            except db.BadQueryError:
                logging.warn('Bad filter expression %s', task.filter)

            # Match against DeviceInfo
            try:
                matching_device_info = model.DeviceInfo.gql('WHERE ' +
                                                            task.filter)
                devices += matching_device_info
            except db.BadQueryError:
                logging.warn('Bad filter expression %s', task.filter)

            for dev in devices:
                if dev and dev.id == device_properties.device_info.id:
                    matched.add(task)

    # Un-assign all current tasks from this device
    for dt in device_properties.device_info.devicetask_set:
        dt.delete()

    # Assign matched tasks to this device
    for task in matched:
        device_task = model.DeviceTask()
        device_task.task = task
        device_task.device_info = device_properties.device_info
        device_task.put()

    return matched
Exemplo n.º 4
0
def GetDeviceSchedule(device_properties):
    """Return entries from the global schedule that match this device."""

    matched = set()
    if not device_properties.device_info:
        return matched

    schedule = model.Task.all()
    for task in schedule:
        if not task.filter:
            try:
                app_version = float(device_properties.app_version[1:])
                if task.type != "tcpthroughput" or app_version > 2.0:
                    matched.add(task)
            except:
                matched.add(task)
        else:
            # Does the filter match this device?
            devices = []
            # Match against DeviceProperties
            try:
                matching_device_properties = model.DeviceProperties.gql(
                    'WHERE ' + task.filter)
                devices += [
                    dp.device_info for dp in matching_device_properties
                ]
            except db.BadQueryError:
                logging.warn('Bad filter expression %s', task.filter)

            # Match against DeviceInfo
            try:
                matching_device_info = model.DeviceInfo.gql('WHERE ' +
                                                            task.filter)
                devices += matching_device_info
            except db.BadQueryError:
                logging.warn('Bad filter expression %s', task.filter)

            for dev in devices:
                if dev and dev.id == device_properties.device_info.id:
                    matched.add(task)

    # Un-assign all current tasks from this device
    for dt in device_properties.device_info.devicetask_set:
        dt.delete()

    # Assign matched tasks to this device
    for task in matched:
        device_task = model.DeviceTask()
        device_task.task = task
        device_task.device_info = device_properties.device_info
        device_task.put()

    ip_list = []
    q = model.CDNIpData.all()
    for record in q.run():
        delta = datetime.now() - record.timestamp
        if delta.days >= 1:
            continue
        ip_list.append(record.ip)

    random.shuffle(ip_list)

    for i in range(0, 10 if len(ip_list) >= 10 else len(ip_list)):
        ping_task = model.Task()
        ping_task.user = users.get_current_user()
        ping_task.count = -1
        ping_task.interval_sec = 3600.0
        ping_task.created = datetime.utcnow()
        ping_task.type = "ping"
        setattr(ping_task, 'mparam_target', ip_list[i])
        matched.add(ping_task)

    return matched