Creation of Command model, moved controler to shared in prep for plugins

This commit is contained in:
Phillip Tarrant 2020-08-31 13:46:25 -04:00
parent 79532ffc6b
commit d6c894c3d9
11 changed files with 117 additions and 25 deletions

View File

@ -9,7 +9,7 @@ from datetime import datetime
from app.classes.shared.helpers import helper
from app.classes.shared.console import console
from app.classes.shared.models import Servers
from app.classes.minecraft.controller import controller
from app.classes.shared.controller import controller
from app.classes.minecraft.server_props import ServerProps
logger = logging.getLogger(__name__)

View File

@ -8,7 +8,7 @@ import datetime
from app.classes.shared.helpers import helper
from app.classes.minecraft.mc_ping import ping
from app.classes.minecraft.controller import controller
from app.classes.shared.controller import controller
from app.classes.shared.models import Host_Stats, Server_Stats
logger = logging.getLogger(__name__)
@ -161,7 +161,7 @@ class Stats:
server_id = s.get('server_id', None)
logger.info('Getting stats for server: {}'.format(server_id))
logger.debug('Getting stats for server: {}'.format(server_id))
# get our server object, settings and data dictionaries
server_obj = s.get('server_obj', None)

View File

@ -236,7 +236,7 @@ class Helpers:
data = json.loads(file_data)
pid = data.get('pid')
started = data.get('started')
console.critical("Another commander agent seems to be running...\npid: {} \nstarted on: {}".format(pid, started))
console.critical("Another Crafty Controller agent seems to be running...\npid: {} \nstarted on: {}".format(pid, started))
except Exception as e:
pass

View File

@ -28,8 +28,6 @@ class BaseModel(Model):
class Meta:
database = database
# todo: access logs
class Users(BaseModel):
user_id = AutoField()
@ -112,6 +110,7 @@ class Commands(BaseModel):
user = ForeignKeyField(Users, backref='user')
source_ip = CharField(default='127.0.0.1')
command = CharField(default='')
executed = BooleanField(default=False)
class Meta:
table_name = "commands"
@ -205,10 +204,14 @@ class db_shortcuts:
# print(server_data)
return server_data
def get_latest_hosts_stats(self):
@staticmethod
def get_latest_hosts_stats():
query = Host_Stats.select().order_by(Host_Stats.id.desc()).get()
return model_to_dict(query)
def get_unactioned_commands(self):
query = Commands.select().where(Commands.executed == False)
return self.return_rows(query)
installer = db_builder()
db_helper = db_shortcuts()

View File

@ -8,10 +8,11 @@ import threading
from app.classes.shared.helpers import helper
from app.classes.shared.console import console
from app.classes.web.tornado import webserver
from app.classes.minecraft import server_props
from app.classes.minecraft.stats import stats
from app.classes.minecraft.controller import controller
from app.classes.shared.controller import controller
from app.classes.minecraft.serverjars import server_jar_obj
from app.classes.shared.models import db_helper
logger = logging.getLogger(__name__)
@ -34,6 +35,9 @@ class TasksManager:
self.schedule_thread = threading.Thread(target=self.scheduler_thread, daemon=True, name="scheduler")
self.command_thread = threading.Thread(target=self.command_watcher, daemon=True, name="command_watcher")
self.command_thread.start()
def get_main_thread_run_status(self):
return self.main_thread_exiting
@ -47,6 +51,16 @@ class TasksManager:
self._main_graceful_exit()
time.sleep(5)
def command_watcher(self):
while True:
# select any commands waiting to be processed
commands = db_helper.get_unactioned_commands()
time.sleep(1)
# def parse_command(self, command):
def _main_graceful_exit(self):
try:
os.remove(helper.session_file)

View File

@ -7,7 +7,7 @@ import bleach
from app.classes.shared.console import console
from app.classes.shared.models import Users, installer
from app.classes.web.base_handler import BaseHandler
from app.classes.minecraft.controller import controller
from app.classes.shared.controller import controller
from app.classes.shared.models import db_helper
from app.classes.shared.helpers import helper
@ -65,6 +65,11 @@ class PanelHandler(BaseHandler):
template = "panel/dashboard.html"
elif page == 'server_detail':
template = "panel/server_details.html"
self.render(
template,
data=page_data

View File

@ -4,7 +4,7 @@ import logging
from app.classes.shared.console import console
from app.classes.web.base_handler import BaseHandler
from app.classes.minecraft.controller import controller
from app.classes.shared.controller import controller
from app.classes.shared.models import db_helper, Servers
from app.classes.minecraft.serverjars import server_jar_obj
from app.classes.minecraft.stats import stats

View File

@ -161,7 +161,13 @@
{% end %}
" role="progressbar" style="width: {{server['stats'][0]['mem_percent']}}%" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
</div>
{{server['stats'][0]['mem_percent']}}% - {{server['stats'][0]['mem']}}
{{server['stats'][0]['mem_percent']}}% -
{% if server['stats'][0]['mem'] == 0 %}
0 MB
{% else %}
{{server['stats'][0]['mem']}}
{% end %}
</td>
<td>
{{ server['stats'][0]['world_name'] }} : {{ server['stats'][0]['world_size'] }}
@ -169,11 +175,16 @@
<td>
{% if server['stats'][0]['int_ping_results'] %}
{{ server['stats'][0]['online'] }} / {{ server['stats'][0]['max'] }} Max<br />
{{ server['stats'][0]['desc'] }} <br />
{{ server['stats'][0]['version'] }}
{% else %}
{{ _("Unable to connect to server") }}
{% if server['stats'][0]['desc'] != 'False' %}
{{ server['stats'][0]['desc'] }} <br />
{% end %}
{% if server['stats'][0]['version'] != 'False' %}
{{ server['stats'][0]['version'] }}
{% end %}
{% end %}
</td>
<td>
{% if server['stats'][0]['running'] %}

View File

@ -0,0 +1,56 @@
{% extends ../base.html %}
{% block meta %}
<!-- <meta http-equiv="refresh" content="60">-->
{% end %}
{% block title %}Crafty Controller - Blank Page{% end %}
{% block content %}
<div class="content-wrapper">
<!-- Page Title Header Starts-->
<div class="row page-title-header">
<div class="col-12">
<div class="page-header">
<h4 class="page-title">Dashboard</h4>
</div>
</div>
</div>
<!-- Page Title Header Ends-->
<div class="row">
<div class="col-md-12 grid-margin">
<div class="card">
<div class="card-body">
</div>
</div>
</div>
</div>
</div>
<!-- content-wrapper ends -->
{% end %}
{% block js %}
<script>
$( document ).ready(function() {
console.log('ready for JS!')
});
</script>
{% end %}

21
main.py
View File

@ -9,8 +9,8 @@ import logging.config
from app.classes.shared.console import console
from app.classes.shared.helpers import helper
from app.classes.shared.models import installer
from app.classes.shared.tasks import tasks_manager
from app.classes.minecraft.controller import controller
from app.classes.shared.controller import controller
from app.classes.shared.cmd import MainPrompt
@ -54,7 +54,7 @@ def setup_logging(debug=False):
""" Our Main Starter """
if __name__ == '__main__':
parser = argparse.ArgumentParser("Crafty Commander - A Server Management System")
parser = argparse.ArgumentParser("Crafty Controller - A Server Management System")
parser.add_argument('-i', '--ignore',
action='store_true',
@ -78,20 +78,23 @@ if __name__ == '__main__':
# print our pretty start message
do_intro()
# our session file, helps prevent multiple commander agents on the same machine.
# our session file, helps prevent multiple controller agents on the same machine.
helper.create_session_file(ignore=args.ignore)
# do our installer stuff
if not installer.is_fresh_install():
installer.create_tables()
installer.default_settings()
# now the tables are created, we can load the tasks_manger
from app.classes.shared.tasks import tasks_manager
tasks_manager.start_webserver()
tasks_manager.start_scheduler()
# slowing down reporting just for a 1/2 second so messages look cleaner
time.sleep(.5)
# do our installer stuff
if installer.is_fresh_install():
installer.create_tables()
installer.default_settings()
# init servers
logger.info("Initializing all servers defined")
console.info("Initializing all servers defined")