diff --git a/circle/dashboard/static/local-logo.png b/circle/dashboard/static/local-logo.png deleted file mode 100644 index b3c1c1f..0000000 Binary files a/circle/dashboard/static/local-logo.png and /dev/null differ diff --git a/circle/vm/models/node.py b/circle/vm/models/node.py index 72201c2..abb9435 100644 --- a/circle/vm/models/node.py +++ b/circle/vm/models/node.py @@ -341,15 +341,21 @@ class Node(OperatedMixin, TimeStampedModel): # Example: # {"target": "circle.szianode.cpu.usage", # "datapoints": [[0.6, 1403045700], [0.5, 1403045760] + logger.info('MONITOR_TARGET: %s', target) try: metric = target['target'] if metric.startswith(prefix): metric = metric[len(prefix):] else: + logger.info('MONITOR_MET: %s %s', target, metric) continue - value = target['datapoints'][-2][0] + value = target['datapoints'][-1][0] + if value is None: + value = target['datapoints'][-2][0] retval[metric] = float(value) + logger.info('MONITOR_RETVAL: %s %s, %s', target['target'], metric, retval[metric]) except (KeyError, IndexError, ValueError, TypeError): + logger.info('MONITOR_ERR: %s %s', metric, value) continue return retval @@ -416,7 +422,7 @@ class Node(OperatedMixin, TimeStampedModel): vm_state_changed hook. """ domains = {} - domain_list = self.remote_query(vm_tasks.list_domains_info, timeout=5, + domain_list = self.remote_query(vm_tasks.list_domains_info, timeout=10, priority="fast") if domain_list is None: logger.info("Monitoring failed at: %s", self.name) diff --git a/circle/vm/tasks/local_periodic_tasks.py b/circle/vm/tasks/local_periodic_tasks.py index cceabeb..e72e74e 100644 --- a/circle/vm/tasks/local_periodic_tasks.py +++ b/circle/vm/tasks/local_periodic_tasks.py @@ -33,7 +33,7 @@ def update_domain_states(): @celery.task(ignore_result=True) -def garbage_collector(timeout=15): +def garbage_collector(offset=timezone.timedelta(seconds=20)): """Garbage collector for instances. Suspends and destroys expired instances. @@ -42,8 +42,10 @@ def garbage_collector(timeout=15): :type timeout: int """ now = timezone.now() + bw = 0 for i in Instance.objects.filter(destroyed_at=None).all(): - if i.time_of_delete and now > i.time_of_delete: + if i.time_of_delete and now > i.time_of_delete + offset and bw < 20: + bw = bw + 1 i.destroy.async(system=True) logger.info("Expired instance %d destroyed.", i.pk) try: @@ -57,7 +59,8 @@ def garbage_collector(timeout=15): logger.debug('Could not notify owner of instance %d .%s', i.pk, unicode(e)) elif (i.time_of_suspend and now > i.time_of_suspend and - i.state == 'RUNNING'): + i.state == 'RUNNING' and bw < 20): + bw = bw + 1 logger.info("Expired instance %d suspended." % i.pk) try: i.sleep.async(system=True) @@ -77,4 +80,4 @@ def garbage_collector(timeout=15): logger.debug("Instance %d expires soon." % i.pk) i.notify_owners_about_expiration() else: - logger.debug("Instance %d didn't expire." % i.pk) + logger.debug("Instance %d didn't expire. bw:%d", i.pk, bw)