Example #1
0
def reset(global_objects, soft = True) :
    '''
    TBD
    '''
    try :
        _msg = "Killing all processes..."
        print _msg,
        _proc_man =  ProcessManagement()
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f cbact")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f cloud-api")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f cloud-gui")        
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f ai-")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f vm-")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f submit-")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f capture-")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f gmetad.py")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f gtkCBUI_")
        print "done"

        _proc_man.run_os_command("screen -wipe")

        _msg = "Flushing Object Store..." 
        print _msg,
        _rmc = RedisMgdConn(global_objects["objectstore"])
        _rmc.flush_object_store()
        print "done"
        
        if not soft :
            _msg = "Flushing Metric Store..."
            print _msg,
            _mmc = MongodbMgdConn(global_objects["metricstore"])
            _mmc.flush_metric_store(global_objects["mon_defaults"]["username"])
            print "done"

            _msg = "Flushing Log Store..."
            print _msg,
            _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f rsyslogd")
            _file_list = []
            _file_list.append("operations.log")
            _file_list.append("report.log")
            _file_list.append("submmiter.log")
            _file_list.append("loadmanager.log")
            _file_list.append("gui.log")
            _file_list.append("remotescripts.log")
            _file_list.append("monitor.log")
            _file_list.append("subscribe.log")

            for _fn in  _file_list :
                _proc_man.run_os_command("rm -rf " + global_objects["space"]["stores_working_dir"] + "/logs/" + _fn)                    

            _status, _msg = syslog_logstore_setup(global_objects, "check")
            print "done"

        _msg = ""
        _status = 0

    except ProcessManagement.ProcessManagementException, obj :
        _status = str(obj.status)
        _msg = str(obj.msg)
Example #2
0
def reset(global_objects, soft = True) :
    '''
    TBD
    '''
    try :
        _msg = "Killing all processes..."
        print _msg,
        _proc_man =  ProcessManagement()
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f cbact")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f cloud-")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f ai-")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f vm-")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f submit-")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f capture-")
        _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f gmetad.py")
        print "done"

        _proc_man.run_os_command("screen -wipe")

        _msg = "Flushing Object Store..." 
        print _msg,
        _rmc = RedisMgdConn(global_objects["objectstore"])
        _rmc.flush_object_store()
        print "done"
        
        if not soft :
            _msg = "Flushing Metric Store..."
            print _msg,
            _mmc = MongodbMgdConn(global_objects["metricstore"])
            _mmc.flush_metric_store(global_objects["mon_defaults"]["username"])
            print "done"

            _msg = "Flushing Log Store..."
            print _msg,
            _proc_man.run_os_command("pkill -9 -u " + global_objects["space"]["username"] + " -f rsyslogd")
            _proc_man.run_os_command("rm " + global_objects["space"]["stores_working_dir"] + "/logs/*.log")
            _status, _msg = syslog_logstore_setup(global_objects, "check")
            print "done"

        _msg = ""
        _status = 0

    except ProcessManagement.ProcessManagementException, obj :
        _status = str(obj.status)
        _msg = str(obj.msg)
def reset(global_objects, soft=True):
    '''
    TBD
    '''
    try:

        _stores_wk_dir = global_objects["space"]["stores_working_dir"]
        _log_dir = global_objects["space"]["log_dir"]
        _username = global_objects["space"]["username"]
        _logstore_username = global_objects["logstore"]["username"]
        _filestore_username = global_objects["filestore"]["username"]

        _filestore_config_file_fn = _stores_wk_dir + '/' + _filestore_username + "_rsync.conf"

        _msg = "Killing all processes..."
        print _msg,
        _proc_man = ProcessManagement()
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f cbact")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f cloud-api")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f cloud-gui")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f ai-")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f vm-")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f submit-")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f capture-")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f gmetad.py")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f gtkCBUI_")
        print "done"

        _proc_man.run_os_command("screen -wipe")

        _proc_man.run_os_command("rm -rf /tmp/restart_cb*" +
                                 global_objects["logstore"]["username"])
        _proc_man.run_os_command("rm -rf /tmp/" + _username +
                                 "_*-*-*-*-*_avg_acc")

        _msg = "Flushing Object Store..."
        print _msg,
        _rmc = RedisMgdConn(global_objects["objectstore"])
        _rmc.flush_object_store()
        print "done"

        _msg = "Flushing Log Store..."
        print _msg,
        _proc_man.run_os_command("pkill -9 -u " + _logstore_username +
                                 " -f rsyslogd")
        _file_list = []
        _file_list.append("operations.log")
        _file_list.append("report.log")
        _file_list.append("submmiter.log")
        _file_list.append("loadmanager.log")
        _file_list.append("gui.log")
        _file_list.append("remotescripts.log")
        _file_list.append("messages.log")
        _file_list.append("monitor.log")
        _file_list.append("subscribe.log")

        for _fn in _file_list:
            _proc_man.run_os_command("rm -rf " + _log_dir + '/' +
                                     _logstore_username + '_' + _fn)
            _proc_man.run_os_command("touch " + _log_dir + '/' +
                                     _logstore_username + '_' + _fn)
        _status, _msg = syslog_logstore_setup(global_objects, "check")

        global_objects["logstore"]["just_restarted"] = True

        print "done\n"

        #_msg = "Flushing File Store..."
        #print _msg,
        #_proc_man.run_os_command("sudo pkill -9 -u root -f \"rsync --daemon --config " + _filestore_config_file_fn +"\"", raise_exception = False)
        #_proc_man.run_os_command("sudo rm -rf " + _stores_wk_dir + '/' + _filestore_username + "_rsyncd.pid")

        #_status, _msg = rsync_filestore_setup(global_objects, "check")
        #print "done"

        if not soft:
            _msg = "Flushing Metric Store..."
            print _msg,
            _mmc = MongodbMgdConn(global_objects["metricstore"])
            _mmc.flush_metric_store(global_objects["mon_defaults"]["username"])
            print "done"

        _msg = ""
        _status = 0

    except ProcessManagement.ProcessManagementException, obj:
        _status = str(obj.status)
        _msg = str(obj.msg)
def redis_objectstore_setup(global_objects, operation, cloud_name=None):
    '''
    TBD
    '''
    _protocol = global_objects["objectstore"]["protocol"]
    _hostname = global_objects["objectstore"]["host"]
    _databaseid = int(global_objects["objectstore"]["dbid"])
    _timeout = float(global_objects["objectstore"]["timout"])
    _username = global_objects["objectstore"]["username"]
    _usage = global_objects["objectstore"]["usage"].lower()

    try:
        _instance_dir = global_objects["space"]["instance_dir"]

        if operation == "check":

            _stores_path = global_objects["space"]["stores_working_dir"]
            if not path.exists(_stores_path):
                cbdebug("Making stores working directory: " + _stores_path)
                mkdir(_stores_path)

            if _usage == "shared":
                _hostport = int(global_objects["objectstore"]["port"])
                _proc_man = ProcessManagement(username="******")

                if not pre_check_port(_hostname, _hostport, _protocol):
                    _redis_pid = _proc_man.get_pid_from_cmdline("redis-server")

                    _cmd = "/usr/local/bin/redis-server /etc/redis.conf"
                    if not _redis_pid:
                        _msg = "Unable to detect a shared Redis server daemon running. "
                        _msg += "Please try to start one (e.g., " + _cmd + ")"
                        print _msg
                        exit(8)

            else:
                _usage = "private"

                _config_file_fn = _stores_path + '/' + _username + "_redis.conf"
                _cmd = "redis-server " + _config_file_fn

                _proc_man = ProcessManagement(username=_username)

                _redis_pid = _proc_man.get_pid_from_cmdline("redis-server")

                if not _redis_pid:
                    global_objects["objectstore"][
                        "port"] = _proc_man.get_free_port(
                            global_objects["objectstore"]["port"],
                            protocol="tcp")
                    _hostport = int(global_objects["objectstore"]["port"])

                    _config_file_contents = global_objects["objectstore"][
                        "config_string"].replace('_', ' ')
                    _config_file_contents = _config_file_contents.replace(
                        "REPLPORT", str(_hostport))
                    _config_file_contents = _config_file_contents.replace(
                        "REPLSTORESWORKINGDIR",
                        global_objects["space"]["stores_working_dir"])
                    _config_file_contents = _config_file_contents.replace(
                        ';', '\n')

                    _config_file_fd = open(_config_file_fn, 'w')
                    _config_file_fd.write(_config_file_contents)
                    _config_file_fd.close()

                    _redis_pid = _proc_man.start_daemon(_cmd)

                    if not _redis_pid:
                        _msg = "Unable to detect a private Redis server daemon running. "
                        _msg += "Please try to start one (e.g., " + _cmd + ")"
                        print _msg
                        exit(8)
                else:
                    global_objects["objectstore"][
                        "port"] = _proc_man.get_port_from_pid(_redis_pid[0])
                    _hostport = int(global_objects["objectstore"]["port"])

            _nh_conn = Nethashget(_hostname)

            _nh_conn.nmap(_hostport, _protocol)
            _msg = "An Object Store of the kind \"Redis\" (" + _usage + ") "
            _msg += "on node " + _hostname + ", " + _protocol
            _msg += " port " + str(_hostport) + ", database id \""
            _msg += str(_databaseid) + "\" seems to be running."
            _status = 0

        else:
            if not cloud_name:
                raise StoreSetupException(
                    "Name of cloud is required for the 'initialize' mode", 22)

            operation = "initialize"

            _hostport = int(global_objects["objectstore"]["port"])

            _collection_names = [ "reported_management_vm_metric_names", \
                                 "reported_runtime_os_host_metric_names", \
                                 "reported_runtime_os_vm_metric_names", \
                                 "host_management_metrics_header", \
                                 "vm_management_metrics_header", \
                                 "host_runtime_os_metrics_header", \
                                 "vm_runtime_os_metrics_header", \
                                 "vm_runtime_app_metrics_header", \
                                 "trace_header" ]

            for _collection_name in _collection_names:
                for _component in global_objects["mon_defaults"][
                        _collection_name].split(','):
                    if _component.lower() in global_objects["mon_defaults"]:
                        global_objects["mon_defaults"][_collection_name] = \
                        global_objects["mon_defaults"][_collection_name].replace(_component, \
                                                                                 global_objects["mon_defaults"][_component.lower()] + ',')
                global_objects["mon_defaults"][_collection_name] = \
                global_objects["mon_defaults"][_collection_name][:-1].replace(",,",',')

            _rmc = RedisMgdConn(global_objects["objectstore"])

            # First we remove the leftovers from previous experiments.
            if _rmc.initialize_object_store(cloud_name, global_objects, True):
                if not path.exists(_instance_dir):
                    mkdir(_instance_dir)

                for _file_name in listdir(_instance_dir):
                    _file_name = path.join(_instance_dir, _file_name)
                    if path.isdir(_file_name):
                        rmtree(_file_name)

                _msg = "Folders (but not data) underneath experiment "
                _msg += "directory " + _instance_dir + " were removed."
                cbdebug(_msg)

                _msg = "The Redis datastore was successfully initialized on server " + _hostname
                _msg += ", port " + str(_hostport) + ", database id \"" + str(
                    _databaseid)
                _msg += "\"."
                cbdebug(_msg)
                _status = 0

            else:
                _msg = "The Object Store of the kind \"Redis\" was successfully initialized "
                _msg += "on node " + _hostname + ". To change its "
                _msg += "attributes/state, use the *alter commands"
                _msg += "(e.g., cldalter, vmcalter, vmalter) or explicity detach "
                _msg += "and attach this cloud back to this experiment."
                cbdebug(_msg)
                _status = 0

        return _status, _msg

    except NetworkException, obj:
        _msg = "An Object Store of the kind \"Redis\" on node "
        _msg += _hostname + ", " + _protocol + " port " + str(_hostport)
        _msg += ", database id \"" + str(_databaseid)
        _msg += "\" seems to be down: " + str(obj.msg) + '.'
        cberr(_msg)
        raise StoreSetupException(_msg, 8)
Example #5
0
def reset(global_objects, soft = True) :
    '''
    TBD
    '''
    try :

        _stores_wk_dir = global_objects["space"]["stores_working_dir"]
        _log_dir = global_objects["space"]["log_dir"]
        _username = global_objects["space"]["username"]
        _logstore_username = global_objects["logstore"]["username"]
        _filestore_username = global_objects["filestore"]["username"]
        
        _filestore_config_file_fn = _stores_wk_dir + '/' + _filestore_username + "_rsync.conf"
            
        _msg = "Killing all processes..."
        print _msg,
        _proc_man =  ProcessManagement()
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f cbact")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f cloud-api")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f cloud-gui")        
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f ai-")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f vm-")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f submit-")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f capture-")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f gmetad.py")
        _proc_man.run_os_command("pkill -9 -u " + _username + " -f gtkCBUI_")
        print "done"

        _proc_man.run_os_command("screen -wipe")

        _proc_man.run_os_command("rm -rf /tmp/restart_cb*" + global_objects["logstore"]["username"])
        _proc_man.run_os_command("rm -rf /tmp/*-*-*-*-*_avg_acc")
        
        _msg = "Flushing Object Store..." 
        print _msg,
        _rmc = RedisMgdConn(global_objects["objectstore"])
        _rmc.flush_object_store()
        print "done"

        _msg = "Flushing Log Store..."
        print _msg,
        _proc_man.run_os_command("pkill -9 -u " + _logstore_username + " -f rsyslogd")
        _file_list = []
        _file_list.append("operations.log")
        _file_list.append("report.log")
        _file_list.append("submmiter.log")
        _file_list.append("loadmanager.log")
        _file_list.append("gui.log")
        _file_list.append("remotescripts.log")
        _file_list.append("messages.log")            
        _file_list.append("monitor.log")
        _file_list.append("subscribe.log")

        for _fn in  _file_list :
            _proc_man.run_os_command("rm -rf " + _log_dir + '/' + _logstore_username + '_' + _fn)
            _proc_man.run_os_command("touch " + _log_dir + '/' + _logstore_username + '_' + _fn)
        _status, _msg = syslog_logstore_setup(global_objects, "check")
        
        global_objects["logstore"]["just_restarted"] = True
        
        print "done\n"
        
        #_msg = "Flushing File Store..."
        #print _msg,
        #_proc_man.run_os_command("sudo pkill -9 -u root -f \"rsync --daemon --config " + _filestore_config_file_fn +"\"", raise_exception = False)
        #_proc_man.run_os_command("sudo rm -rf " + _stores_wk_dir + '/' + _filestore_username + "_rsyncd.pid")

        #_status, _msg = rsync_filestore_setup(global_objects, "check")
        #print "done"
        
        if not soft :
            _msg = "Flushing Metric Store..."
            print _msg,
            _mmc = MongodbMgdConn(global_objects["metricstore"])
            _mmc.flush_metric_store(global_objects["mon_defaults"]["username"])
            print "done"
                        
        _msg = ""
        _status = 0

    except ProcessManagement.ProcessManagementException, obj :
        _status = str(obj.status)
        _msg = str(obj.msg)
Example #6
0
def redis_objectstore_setup(global_objects, operation, cloud_name = None) :
    '''
    TBD
    '''
    _protocol = global_objects["objectstore"]["protocol"]
    _hostname = global_objects["objectstore"]["host"]
    _databaseid = int(global_objects["objectstore"]["dbid"])
    _timeout = float(global_objects["objectstore"]["timout"])
    _username = global_objects["objectstore"]["username"]
    _usage = global_objects["objectstore"]["usage"].lower()

    try :
        _instance_dir = global_objects["space"]["instance_dir"]

        if operation == "check" :

            _stores_path = global_objects["space"]["stores_working_dir"]
            if not path.exists(_stores_path) :
                cbdebug("Making stores working directory: " + _stores_path)
                mkdir(_stores_path)
                
            if _usage == "shared" :
                _hostport = int(global_objects["objectstore"]["port"])
                _proc_man =  ProcessManagement(username = "******")

                if not pre_check_port(_hostname, _hostport, _protocol) :
                    _redis_pid = _proc_man.get_pid_from_cmdline("redis-server")

                    _cmd = "/usr/local/bin/redis-server /etc/redis.conf"
                    if not _redis_pid :
                        _msg = "Unable to detect a shared Redis server daemon running. "
                        _msg += "Please try to start one (e.g., " + _cmd + ")"                    
                        print _msg
                        exit(8)

            else :
                _usage = "private"

                _config_file_fn = _stores_path + '/' + _username + "_redis.conf"
                _cmd = "redis-server " + _config_file_fn

                _proc_man =  ProcessManagement(username = _username)
                
                _redis_pid = _proc_man.get_pid_from_cmdline("redis-server")      

                if not _redis_pid :
                    global_objects["objectstore"]["port"] = _proc_man.get_free_port(global_objects["objectstore"]["port"], protocol = "tcp")
                    _hostport = int(global_objects["objectstore"]["port"])

                    _config_file_contents = global_objects["objectstore"]["config_string"].replace('_', ' ')
                    _config_file_contents = _config_file_contents.replace("REPLPORT", str(_hostport))
                    _config_file_contents = _config_file_contents.replace("REPLSTORESWORKINGDIR", global_objects["space"]["stores_working_dir"])
                    _config_file_contents = _config_file_contents.replace(';','\n')

                    _config_file_fd = open(_config_file_fn, 'w')
                    _config_file_fd.write(_config_file_contents)
                    _config_file_fd.close()

                    _redis_pid = _proc_man.start_daemon(_cmd)

                    if not _redis_pid :
                        _msg = "Unable to detect a private Redis server daemon running. "
                        _msg += "Please try to start one (e.g., " + _cmd + ")"
                        print _msg
                        exit(8)
                else :
                    global_objects["objectstore"]["port"] = _proc_man.get_port_from_pid(_redis_pid[0]) 
                    _hostport = int(global_objects["objectstore"]["port"])

            _nh_conn = Nethashget(_hostname)

            _nh_conn.nmap(_hostport, _protocol)
            _msg = "An Object Store of the kind \"Redis\" (" + _usage + ") "
            _msg += "on node " + _hostname + ", " + _protocol 
            _msg += " port " + str(_hostport) + ", database id \""
            _msg += str(_databaseid) + "\" seems to be running."
            _status = 0

        else :
            if not cloud_name :
                raise StoreSetupException("Name of cloud is required for the 'initialize' mode", 22)
            
            operation = "initialize"

            _hostport = int(global_objects["objectstore"]["port"])

            _collection_names = [ "reported_management_vm_metric_names", \
                                 "reported_runtime_os_host_metric_names", \
                                 "reported_runtime_os_vm_metric_names", \
                                 "host_management_metrics_header", \
                                 "vm_management_metrics_header", \
                                 "host_runtime_os_metrics_header", \
                                 "vm_runtime_os_metrics_header", \
                                 "vm_runtime_app_metrics_header", \
                                 "trace_header" ]

            for _collection_name in _collection_names : 
                for _component in global_objects["mon_defaults"][_collection_name].split(',') :
                    if _component.lower() in global_objects["mon_defaults"] :
                        global_objects["mon_defaults"][_collection_name] = \
                        global_objects["mon_defaults"][_collection_name].replace(_component, \
                                                                                 global_objects["mon_defaults"][_component.lower()] + ',')
                global_objects["mon_defaults"][_collection_name] = \
                global_objects["mon_defaults"][_collection_name][:-1].replace(",,",',')

            _rmc = RedisMgdConn(global_objects["objectstore"])

            # First we remove the leftovers from previous experiments.
            if _rmc.initialize_object_store(cloud_name, global_objects, True) :
                if not path.exists(_instance_dir) :
                    mkdir(_instance_dir)

                for _file_name in listdir(_instance_dir) :
                    _file_name = path.join(_instance_dir, _file_name)
                    if path.isdir(_file_name) :
                        rmtree(_file_name)

                _msg = "Folders (but not data) underneath experiment "
                _msg += "directory " + _instance_dir + " were removed."
                cbdebug(_msg)

                _msg = "The Redis datastore was successfully initialized on server " + _hostname
                _msg += ", port " + str(_hostport) + ", database id \"" + str(_databaseid)
                _msg += "\"."
                cbdebug(_msg)
                _status = 0

            else :
                _msg = "The Object Store of the kind \"Redis\" was successfully initialized "
                _msg += "on node " + _hostname + ". To change its "
                _msg += "attributes/state, use the *alter commands"
                _msg += "(e.g., cldalter, vmcalter, vmalter) or explicity detach "
                _msg += "and attach this cloud back to this experiment."
                cbdebug(_msg)
                _status = 0

        return _status, _msg
    
    except NetworkException, obj :
        _msg = "An Object Store of the kind \"Redis\" on node "
        _msg += _hostname + ", " + _protocol + " port " + str(_hostport)
        _msg += ", database id \"" + str(_databaseid)
        _msg += "\" seems to be down: " + str(obj.msg) + '.'
        cberr(_msg)
        raise StoreSetupException(_msg, 8)