Commit 4a49463c authored by Grégor JOUET's avatar Grégor JOUET 🔧
Browse files

Added ci (and other)

parent 869fcee8
Loading
Loading
Loading
Loading

.dockerignore

0 → 100644
+2 −0
Original line number Diff line number Diff line
printer/
.vscode/
 No newline at end of file
+26 −0
Original line number Diff line number Diff line
@@ -28,8 +28,10 @@ from flask_cors import CORS
from myfab.queue import (
    get_printers_from_db,
    get_printers,
    get_printer_by_name,
    get_printer_by_id,
    get_printers_for_queue,
    register_printer,
    get_queue_by_id,
    delete_printer
)
@@ -543,6 +545,30 @@ def add_new_printer():
                   config=printer_info['config'])
    return jsonify({})

@app.route("/printers/announce/<name>/<key>")
def announce_printer(name, key):
    cfg = json.dumps({
        'hostname': request.client_ip,
        'port': 5000,
        'key': key
    })
    printer = get_printer_by_name(name)
    if printer == None:
        register_printer(Printer.create(name=name, model='octoprint', config=cfg))
        return jsonify({})
    printer.printer_obj.config = cfg
    printer.printer_obj.save()
    printer.reload_printer_connection_settings()
    return jsonify({})

@app.route("/printers/everyone_go_home")
@jwt_required
def home_all():
    for p in get_printers():
        if p.model == 'octoprint' and p.ready_state:
            p.goto_home()
    return jsonify({})

@app.route("/printers/<printer_id>", methods=["DELETE"])
@jwt_required
def remove_printer(printer_id):
+38 −20
Original line number Diff line number Diff line
@@ -130,12 +130,23 @@ def get_printer_by_id(printer_id):
            return p
    return None

def get_printer_by_name(printer_name):
    for p in get_printers():
        if p.name == printer_name:
            return p
    return None

def pull_printers():
    # Called once to fetch printers from db
    global PRINTERS
    PRINTERS = get_printers_from_db()

def register_printer(printer):
    global PRINTERS
    if get_printer_by_id(printer.id) != None:
        raise Exception("Printer already exists")
    PRINTERS.append(build_printer(printer))


def get_printers():
    global PRINTERS
@@ -153,6 +164,7 @@ def delete_printer(printer_id):
class PrinterBase:
    def __init__(self, printer_obj):
        self.printer_obj: Printer = printer_obj
        self.name = printer_obj.name
        # self.id = printer_obj.id
        # self.name = printer_obj.name
        self.queues = []
@@ -231,20 +243,8 @@ class FakePrinter(PrinterBase):
class OctoPrinter(PrinterBase):
    def __init__(self, printer_obj):
        super().__init__(printer_obj)
        config = printer_obj.config
        """
     {
       'hostname': 'hostname or ip',
       'port': port
       'key': the api-key
     }
    """
        self._version = "Unknown"
        self.hostname = config.hostname
        self.port = config.port
        self.key = config.key
        self.ready_for_printing = False  # can accept new print
        self.test_and_pull_printer_global_info()
        self.reload_printer_connection_settings()
        self.load_queues()
        self.printer_state = {
            "temperatures": {"bed": float("nan"), "tip": float("nan")},
@@ -266,6 +266,28 @@ class OctoPrinter(PrinterBase):
        }
        self.reset_current_print()

    def reload_printer_settings(self):
        self.printer_obj = type(self.printer_obj).get(self.printer_obj._pk_expr())
        log.info(f'Printer #{self.id} ({self.name}): Reloaded base object')
        self.reload_printer_connection_settings()

    def reload_printer_connection_settings(self):
        config = json.loads(self.printer_obj.config)
        """
            {
            'hostname': 'hostname or ip',
            'port': port
            'key': the api-key,
            }
        """
        self._version = "Unknown"
        self.hostname = config.hostname
        self.port = config.port
        self.key = config.key
        self.name = config.name
        log.info(f'Printer #{self.id} ({self.name}): Changed connection settings ({self.hostname})')
        self.test_and_pull_printer_global_info()

    def start_print(self, print_obj: PrintRequest):
        self._refresh_printer_status()
        self._refresh_ready_state()
@@ -313,7 +335,7 @@ class OctoPrinter(PrinterBase):
                f"http://{self.hostname}:{self.port}{path}",
                headers={"X-Api-Key": self.key},
                payload=data,
                files=None
                files=files
            ).text
        )

@@ -328,9 +350,7 @@ class OctoPrinter(PrinterBase):
        }))

    def _refresh_printer_status(self):
        log.info(
            f'Printer #{self.id} ({self.name}) @ {self.hostname}: refreshing status'
        )
        log.info(f'Printer #{self.id} ({self.name}) @ {self.hostname}: refreshing status')
        status = self._make_octoprint_raw_request("/api/printer")
        self.printer_state = {
            "temperatures": {
@@ -354,9 +374,7 @@ class OctoPrinter(PrinterBase):

    def test_and_pull_printer_global_info(self):
        versions = self._make_octoprint_raw_request("/api/version")
        log.info(
            f"Printer #{self.id} ({self.name}) @ {self.hostname}: connected to octoprint"
        )
        log.info(f"Printer #{self.id} ({self.name}) @ {self.hostname}: connected to octoprint")
        log.info(f'Version info: {versions["text"]} API v{versions["text"]})')
        self._version = versions["text"]

ci/Dockerfile

0 → 100644
+16 −0
Original line number Diff line number Diff line
FROM ubuntu:18.04

RUN apt update
RUN apt install -y python3.8 python3-pip mysql-client nodejs nginx curl sudo
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
    apt update && apt install -y yarn

COPY . /app

RUN cd /app/back && pip3 install -r requirements.txt
RUN cd /app/ui && yarn && yarn build
RUN cp /app/ci/nginx.conf /etc/nginx
RUN nginx -t

CMD /app/ci/start.sh
 No newline at end of file

ci/nginx.conf

0 → 100644
+43 −0
Original line number Diff line number Diff line
worker_processes auto;
pid /run/nginx.pid;

events {
	worker_connections 768;
}

http {
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;

	gzip on;


	client_max_body_size 10M;

	server {
        server_name _;
        listen 80;
        client_max_body_size    0;
        client_body_buffer_size 1m;
        access_log /dev/stdout;
        error_log /dev/stderr;
        proxy_redirect off;

        location /api {
            proxy_pass    http://localhost:8080/;
        }

        location / {
            root /app/ui/public;
            try_files $uri /index.html;
    }

}

}


Loading