Sfoglia il codice sorgente

fixed up js for build refresh

Andrew Tridgell 4 anni fa
parent
commit
6018b64072
3 ha cambiato i file con 47 aggiunte e 95 eliminazioni
  1. 33 33
      app.py
  2. 14 13
      templates/generate.html
  3. 0 49
      templates/generate_basic.html

+ 33 - 33
app.py

@@ -8,7 +8,7 @@ import shutil
 import glob
 import time
 from distutils.dir_util import copy_tree
-from flask import Flask, render_template, request, url_for
+from flask import Flask, render_template, request, url_for, send_from_directory
 from threading import Thread, Lock
 
 #BOARDS = [ 'BeastF7', 'BeastH7' ]
@@ -147,7 +147,8 @@ def check_queue():
     taskfile = json_files[0]
     app.logger.info('Opening ' + taskfile)
     task = json.loads(open(taskfile).read())
-    print(task)
+    app.logger.info('Removing ' + taskfile)
+    os.remove(taskfile)
     outdir = os.path.join(outdir_parent, task['token'])
     tmpdir = os.path.join(tmpdir_parent, task['token'])
     try:
@@ -163,9 +164,7 @@ def check_queue():
         app.logger.info('Removing ' +
                         os.path.join(outdir, 'extra_hwdef.dat'))
         os.remove(os.path.join(outdir, 'extra_hwdef.dat'))
-        app.logger.info('Removing ' + taskfile)
-        os.remove(taskfile)
-                
+
     except Exception as ex:
         app.logger.info('Build failed')
         app.logger.error(ex)
@@ -186,6 +185,21 @@ def queue_thread():
             app.logger.error(ex)('Failed queue: ', ex)
             pass
 
+def update_source():
+    '''update submodules and ardupilot git tree'''
+    app.logger.info('Fetching ardupilot origin')
+    subprocess.run(['git', 'fetch', 'upstream'],
+                   cwd=sourcedir)
+    app.logger.info('Updating ardupilot git tree')
+    subprocess.run(['git', 'reset', '--hard',
+                    'upstream/master'],
+                       cwd=sourcedir)
+    app.logger.info('Updating submodules')
+    subprocess.run(['git', 'submodule',
+                    'update', '--recursive',
+                        '--force', '--init'],
+                       cwd=sourcedir)
+        
 import optparse
 parser = optparse.OptionParser("app.py")
 
@@ -211,17 +225,8 @@ thread.start()
 @app.route('/generate', methods=['GET', 'POST'])
 def generate():
     try:
-        # update submodules and ardupilot git tree
-        app.logger.info('Updating submodules')
-        subprocess.run(['git', 'submodule',
-                        'update', '--recursive', 
-                        '--force', '--init'])
-        app.logger.info('Fetching ardupilot origin')
-        subprocess.run(['git', 'fetch', 'upstream'])
-        app.logger.info('Updating ardupilot git tree')
-        subprocess.run(['git', 'reset', '--hard', 
-                        'upstream/master'], 
-                        cwd=sourcedir)
+        update_source()
+
         # fetch features from user input
         extra_hwdef = []
         feature_list = []
@@ -315,14 +320,13 @@ def generate():
 
         queue_lock.release()
 
-        apache_build_dir = 'http://localhost:8080/' \
-                            + os.path.join('builds', token)
-        apache_build_log = 'http://localhost:8080/' \
-                            + os.path.join('builds', token, 'build.log')
-        apache_all_builds = 'http://localhost:8080/' \
-                            + 'builds'
-        app.logger.info('Rendering generate_basic.html')
-        return render_template('generate_basic.html', 
+        base_url = request.url_root
+        app.logger.info(base_url)
+        apache_build_dir = base_url + os.path.join('builds', token)
+        apache_build_log = base_url + os.path.join('builds', token, 'build.log')
+        apache_all_builds = base_url + 'builds'
+        app.logger.info('Rendering generate.html')
+        return render_template('generate.html',
                                 apache_build_dir=apache_build_dir, 
                                 apache_build_log=apache_build_log,
                                 apache_all_builds=apache_all_builds,
@@ -330,7 +334,7 @@ def generate():
     
     except Exception as ex:
         app.logger.error(ex)
-        return render_template('generate_basic.html', error='Error occured')
+        return render_template('generate.html', error='Error occured')
 
 def get_build_options():
     return BUILD_OPTIONS
@@ -347,14 +351,10 @@ def home():
                            get_vehicles=get_vehicles,
                            get_build_options=get_build_options)
 
-@app.route('/stream')
-def stream():
-    def generate():
-        with open(os.path.join(outdir, 'build.log')) as f:
-            while True:
-                yield f.read()
-                time.sleep(1)
-    return app.response_class(generate(), mimetype='text/plain')
+@app.route("/builds/<path:name>")
+def download_file(name):
+    app.logger.info('Downloading %s' % name)
+    return send_from_directory(os.path.join(basedir,'builds'), name, as_attachment=False)
 
 if __name__ == '__main__':
     app.run()

+ 14 - 13
templates/generate.html

@@ -10,9 +10,6 @@
   <body onload="javascript: reload()">
     <div id="menu">
         <p>Build in progress...</p>
-        <form action="{{apache_build_log}}" target="_blank">
-            <input type="submit" value="View build log file" />
-        </form>
         <form action="{{apache_build_dir}}" target="_blank">
             <input type="submit" value="Go to build directory" />
         </form>
@@ -26,20 +23,24 @@
     <p>Build ID: {{ token }}</p>
     <p>Build progress:</p>
     <textarea  
-        id="output" rows="30" cols="100" readonly autocomplete="off">
+        id="build_output" rows="30" cols="100" readonly autocomplete="off">
     </textarea>
     <script>
-        var output = document.getElementById('output');
-        output.scrollTop = output.scrollHeight;
-        var xhr = new XMLHttpRequest();
-        xhr.open('GET', "{{ url_for('stream') }}");
-        xhr.send();
-        setInterval(function() {
-            output.textContent = xhr.responseText;
-        }, 1);
+      function reload() {
+            var output = document.getElementById('build_output');
+            output.scrollTop = output.scrollHeight;
+            var xhr = new XMLHttpRequest();
+            xhr.open('GET', "{{apache_build_log}}");
+            xhr.onload = function() {
+                if (xhr.status == 200) {
+                    output.textContent = xhr.responseText; }
+            }
+            xhr.send();
+        }
+      setInterval(reload,5000)
     </script>
 
   </body>
 {% endif %}
 
-</html>
+</html>

+ 0 - 49
templates/generate_basic.html

@@ -1,49 +0,0 @@
-<!doctype html>
-<html>
-
-<title>ArduPilot Custom Firmware Builder</title>
-<h1>ArduPilot Custom Firmware Builder</h1>
-
-{% if error %}
-  <p>{{ error }}!</p>
-{% else %}
-  <body onload="javascript: reload()">
-    <div id="menu">
-        <p>Build in progress...</p>
-        <form action="{{apache_build_log}}" target="_blank">
-            <input type="submit" value="View build log file" />
-        </form>
-        <form action="{{apache_build_dir}}" target="_blank">
-            <input type="submit" value="Go to build directory" />
-        </form>
-        <form action="{{apache_all_builds}}" target="_blank">
-            <input type="submit" value="See all builds" />
-        </form>
-        <form action="/home" method="post">
-            <input type="submit" value="Queue another build" method="post">
-        </form>
-    </div>
-    <p>Build ID: {{ token }}</p>
-    <p>Build progress:</p>
-    <div id="output">
-        <object width="800" height="500" type="text/plain" data="{{apache_build_log}}" border="0" >
-        </object>
-    </div>
-    
-    <script>
-        function reload(){
-            var output = document.getElementById("output");
-            var content = output.innerHTML;
-            output.innerHTML= content;
-            output.scrollTop = output.scrollHeight;
-    
-        //this line is to watch the result in console , you can remove it later	
-        console.log("Refreshed");
-        window.setInterval(reload, 5000);
-        }
-    </script>
-
-  </body>
-{% endif %}
-
-</html>