Exemple #1
0
def schedule_2(spec):
    scheduled_containers = []
    info = ''
    container_id_list_all = itf_database.get_container_id_list()
    # filter out some containers
    container_id_list = []
    for cid in container_id_list_all:
        status = itf_database.get_status(cid)
        if qos_checker.check_space(spec, [status]) and \
                qos_checker.check_dataintegrity(spec,[status]) and \
                status.StorageReliability > 0 and \
                status.ContainerAvailability > 0:
            container_id_list.append(cid)
    # check if k containers together can satisfy the spec
    for k in range(min(5, len(container_id_list))):
        cid_comb = list(itertools.combinations(container_id_list, k))
        for comb in cid_comb:
            cid_list = list(comb)
            status_list = [itf_database.get_status(x) for x in cid_list]
            if qos_checker.check_availability(spec, status_list) and \
                    qos_checker.check_reliability(spec, status_list) and \
                    qos_checker.check_bandwidth(spec, status_list) and \
                    qos_checker.check_latency(spec, status_list):
                scheduled_containers = cid_list
                costs = [x.CostPerGBMonth for x in status_list]
                cost = sum(costs) / 1024.0 * spec.ReservedSize
                info = '$%.2f/month' % cost
                return scheduled_containers, info
    return scheduled_containers, info
Exemple #2
0
def schedule_0(spec):
    scheduled_containers = []
    info = ''
    container_id_list = itf_database.get_container_id_list()
    container_id_list = [x for x in container_id_list if \
            qos_checker.check_space(spec, [itf_database.get_status(x)])]
    if len(container_id_list) > 0:
        container_id = container_id_list[0]
        status = itf_database.get_status(container_id)
        scheduled_containers.append(container_id)
        cost = status.CostPerGBMonth / 1024.0 * spec.ReservedSize
        info = '$%.2f/month' % cost
    return scheduled_containers, info
Exemple #3
0
        print '[Container Monitor] Call QoS Monitor for', container_id
        monitor_qos.monitor_container(container_id)

# Insert a new container status to database, called by QoS Manager
def insert(status_path):
    status_remote = get_container_status(status_path)
    if status_remote is not None:
        container_id = status_remote.ContainerId
        status_remote.StatusPath = status_path
        # Initial reserved size = used size
        status_remote.StorageReserved = status_remote.StorageUsed
        added = itf_database.update_container(status_remote, init=True)
    else:
        print "[Container Monitor] Status path " + status_path + \
                " is not available"


# Container Monitor Mainloop
if __name__ == '__main__':
    print '[Container Monitor] Start monitoring...'
    while True:
        records = itf_database.get_container_id_list()
        for record in records:
            print '--------------------'
            print '[Container Monitor] Check ' + record
	    
            update(record)
            time.sleep(3)
        time.sleep(10)