def test_update_host_status(self, session, _session): _commit = mock.Mock() _session.commit = _commit _insert_data = HostMeta(hostname="Marvin", ip="123.456.78.9") session.add(_insert_data) with mock.patch.object( HostMeta, "query", session.query_property() ) as _query: HostMeta.update_host_status( "123.456.78.9", { "Hostname": "Marvin", "IP": "123.456.78.9", "Status": "Active", "CPU Load": 0.1, "Memory Usage": [2000, 5000], "Disk Usage": [20, 40] } ) _commit.assert_called_once_with() _query_data = session.query(HostMeta).filter_by( hostname="Marvin" ).first() self.assertEqual(_query_data.status, json.dumps( { "Hostname": "Marvin", "IP": "123.456.78.9", "Status": "Active", "CPU Load": 0.1, "Memory Usage": [2000, 5000], "Disk Usage": [20, 40] } ))
def cron_get_host_process_status(): hosts_status = HostMeta.get_all_hosts_status() for host_id in hosts_status: host_ip = hosts_status[host_id]["IP"] process_status = get_host_process_status(host_ip) HostMeta.update_host_process_status(ip=host_ip, process_status=process_status)
def test_get_host_process_status(self, session): _insert_data = HostMeta(hostname="Marvin", ip="123.456.78.9") _insert_data.process_status = json.dumps([ { "PID": 1, "User": "******", "Memory Usage": 0.1, "CPU Usage": 0.2, "Time": "11:11:11", "Command": "/bin/place/holder" } ]) session.add(_insert_data) with mock.patch.object( HostMeta, "query", session.query_property() ) as _query: _id = HostMeta.query.all()[-1].id hosts_process_status = HostMeta.get_host_process_status( host_id=_id ) self.assertEqual(hosts_process_status, [ { "PID": 1, "User": "******", "Memory Usage": 0.1, "CPU Usage": 0.2, "Time": "11:11:11", "Command": "/bin/place/holder" } ])
def test_update_hosts_dockers_status(self, session, _session): _dockers_status = [ { "Container ID": "4c01db0b339c", "Image": "ubuntu:12.04", "Command": "bash", "Created": "17 seconds ago", "Status": "Up 16 seconds", "Ports": "3300-3310/tcp", "Names": "webapp" } ] _commit = mock.Mock() _session.commit = _commit _insert_data = HostMeta(hostname="Marvin", ip="123.456.78.9") session.add(_insert_data) with mock.patch.object( HostMeta, "query", session.query_property() ) as _query: HostMeta.update_host_dockers_status( ip="123.456.78.9", dockers_status=_dockers_status ) _commit.called_once_with() _query_data = session.query(HostMeta).filter_by( hostname="Marvin" ).first() self.assertEqual( _query_data.dockers_status, json.dumps(_dockers_status) )
def test_get_all_hosts_dockers_status(self, session): _dockers_status = [ { "Container ID": "4c01db0b339c", "Image": "ubuntu:12.04", "Command": "bash", "Created": "17 seconds ago", "Status": "Up 16 seconds", "Ports": "3300-3310/tcp", "Names": "webapp" } ] _insert_data = HostMeta(hostname="Marvin", ip="123.456.78.9") _insert_data.dockers_status = json.dumps(_dockers_status) session.add(_insert_data) with mock.patch.object( HostMeta, "query", session.query_property() ) as _query: dockers_status = HostMeta.get_all_hosts_dockers_status() _result_dockers_status = _dockers_status[:] _result_dockers_status[0].update({ "IP": "123.456.78.9", "Hostname": "Marvin" }) self.assertEqual(dockers_status, _result_dockers_status)
def test_update_host_process_status(self, session, _session): _commit = mock.Mock() _session.commit = _commit _insert_data = HostMeta(hostname="Marvin", ip="123.456.78.9") session.add(_insert_data) with mock.patch.object( HostMeta, "query", session.query_property() ) as _query: HostMeta.update_host_process_status( "123.456.78.9", [{ "PID": 2, "User": "******", "Memory Usage": 0.2, "CPU Usage": 0.4, "Time": "23:33:33", "Command": "/bin/another/place/holder" }] ) _commit.called_once_with() _query_data = session.query(HostMeta).filter_by( hostname="Marvin" ).first() self.assertEqual(_query_data.process_status, json.dumps( [{ "PID": 2, "User": "******", "Memory Usage": 0.2, "CPU Usage": 0.4, "Time": "23:33:33", "Command": "/bin/another/place/holder" }] ))
def cron_get_host_docker_status(): hosts_status = HostMeta.get_all_hosts_status() for host_id in hosts_status: host_ip = hosts_status[host_id]["IP"] dockers_status = get_host_docker_status(host_ip) for docker_status in dockers_status: docker_status.update({ "IP": hosts_status[host_id]["IP"], "Hostname": hosts_status[host_id]["Hostname"], }) HostMeta.update_host_dockers_status(ip=host_ip, dockers_status=dockers_status)
def cron_get_host_status(): hosts_status = HostMeta.get_all_hosts_status() for host_id in hosts_status: host_ip = hosts_status[host_id]["IP"] host_status = get_host_status(host_ip) host_status.update( { "Hostname": hosts_status[host_id]["Hostname"], "IP": hosts_status[host_id]["IP"] } ) HostMeta.update_host_status(ip=host_ip, status=host_status)
def do_deploy(deploy_id, entry_point, user, hosts, repo_uri): hosts_status = HostMeta.get_all_hosts_status() hosts_ip = [hosts_status[_id]["IP"] for _id in hosts] p = Process(target=deploy, kwargs={ "deploy_id": deploy_id, "entry_point": entry_point, "user": user, "hosts_ip": hosts_ip, "repo_uri": repo_uri }) p.start()
def get_ssh_permission_by_user_id(cls, user_id): all_hosts_status = HostMeta.get_all_hosts_status() session.close() hosts_has_permission = set([ item.host_id for item in cls.query.filter_by(user_id=user_id).all() ]) result = {} for host_id in all_hosts_status.keys(): result[host_id] = { "Hostname": all_hosts_status[host_id]["Hostname"], "IP": all_hosts_status[host_id]["IP"], "Has Permission": ( True if host_id in hosts_has_permission else False ) } return result
def test_get_all_hosts_status(self, session): _insert_data = HostMeta(hostname="Marvin", ip="123.456.78.9") session.add(_insert_data) with mock.patch.object( HostMeta, "query", session.query_property() ) as _query: hosts_status = HostMeta.get_all_hosts_status() self.assertEqual(hosts_status, { hosts_status.keys()[0]: { "Hostname": "Marvin", "IP": "123.456.78.9", "Status": "Down", "CPU Load": 0, "Memory Usage": [0, 0], "Disk Usage": [0, 0] } })
def patch(self): username = self.get_secure_cookie("username") user_item = UserMeta.query.filter_by(username=username).first() user_id, public_key_path = user_item.id, user_item.public_key host_id, has_permission = ( int(self.get_argument("host_id")), True if self.get_argument("has_permission") == "true" else False ) if has_permission: host_ip = HostMeta.get_all_hosts_status()[host_id]["IP"] ssh_permission_item = SSHPermissionMeta( user_id=user_id, host_id=host_id ) session.add(ssh_permission_item) session.commit() session.close() print public_key_path, user_id subprocess.call( "cat " + public_key_path + " | ssh root@" + host_ip + " \'cat >> ~/.ssh/authorized_keys\'", shell=True ) self.write({"msg": "success"})
def get(self): self.write( json.dumps(HostMeta.get_all_hosts_dockers_status()) )
def get(self, host_id): self.write( json.dumps(HostMeta.get_host_process_status(host_id=int(host_id))) )
def get(self): self.write(HostMeta.get_all_hosts_status())