From ad7845cf3d783d246115af7b44d7a42dc438c4ff Mon Sep 17 00:00:00 2001
From: karnem <mikhail.karnevskiy@desy.de>
Date: Sat, 12 Oct 2019 21:43:36 +0200
Subject: [PATCH] Add dark overview

---
 webservice/serve_overview.py            | 40 +++++++++++++++++++++++++
 webservice/serve_overview.yaml          |  3 +-
 webservice/templates/dark_overview.html | 34 +++++++++++++++++++++
 3 files changed, 76 insertions(+), 1 deletion(-)
 create mode 100644 webservice/templates/dark_overview.html

diff --git a/webservice/serve_overview.py b/webservice/serve_overview.py
index 1dcf1120d..bd1281e2b 100644
--- a/webservice/serve_overview.py
+++ b/webservice/serve_overview.py
@@ -3,6 +3,7 @@ import glob
 import os
 import sqlite3
 from collections import OrderedDict
+from datetime import datetime, timezone
 from http.server import BaseHTTPRequestHandler, HTTPServer
 from subprocess import check_output
 from uuid import uuid4
@@ -158,6 +159,45 @@ class RequestHandler(BaseHTTPRequestHandler):
 
             self.wfile.write(bytes(message, "utf8"))
             return
+
+        if "dark?" in self.path:
+            # Send headers
+            self.send_header('Content-type', 'text/html')
+            self.end_headers()
+            host = config["server-config"]["host"]
+            port = config["server-config"]["port"]
+            reports = {}
+            for instrument, detectors in cal_config['dark'].items():
+                reports[instrument] = {}
+                for detector in detectors:
+                    det_inset = detector.replace('-', '_')
+                    tmpl = '/gpfs/exfel/exp/{}/*/*/usr/dark/*/{}'.format(
+                        instrument, det_inset)
+                    files = glob.glob(tmpl + '/*pdf')
+                    files += glob.glob(tmpl + '/*/*pdf')
+                    files.sort(key=os.path.getmtime)
+                    file_info = []
+                    for i, file in enumerate(files):
+                        if 'xfel.pdf' in file:
+                            continue
+                        if (i % 2) == 0:
+                            bgcolor = 'EEEEEE'
+                        else:
+                            bgcolor = 'FFFFFF'
+                        time = os.stat(file).st_mtime
+                        d_time = datetime.fromtimestamp(time).replace(
+                            tzinfo=timezone.utc)
+                        s_time = d_time.strftime('%y-%m-%d %H:%M')
+                        file_info.append([file, s_time, bgcolor])
+
+                    reports[instrument][detector] = file_info
+
+            tmpl = Template(self.templates["dark-overview"])
+            message = tmpl.render(reports=reports, host=host, port=port)
+
+            self.wfile.write(bytes(message, "utf8"))
+            return
+
         # Send headers
         self.send_header('Content-type', 'text/html')
         self.end_headers()
diff --git a/webservice/serve_overview.yaml b/webservice/serve_overview.yaml
index fd2c4b49f..1888dcbcb 100644
--- a/webservice/serve_overview.yaml
+++ b/webservice/serve_overview.yaml
@@ -6,6 +6,7 @@ templates:
   running-jobs: ./templates/running_jobs.html
   request-dark: ./templates/request_dark.html
   checkbox: ./templates/checkbox.html
+  dark-overview: ./templates/dark_overview.html
   css: ./templates/serve_overview.css
 
 shell-commands:
@@ -49,4 +50,4 @@ server-config:
 
 web-service:
     job-db: ./webservice_jobs.sqlite
-    cal-config: /home/karnem/myscratch/calibration3/calibration_configurations/default.yaml
\ No newline at end of file
+    cal-config: /home/karnem/myscratch/calibration3/calibration_configurations/default.yaml
diff --git a/webservice/templates/dark_overview.html b/webservice/templates/dark_overview.html
new file mode 100644
index 000000000..200c63b3b
--- /dev/null
+++ b/webservice/templates/dark_overview.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <link rel="stylesheet" href="serve_overview.css">
+    <title>Overview of dark runs</title>
+</head>
+<body>
+
+<div class="block">
+   <h1>Dark runs</h1>
+   {% for instrument, detectors in reports.items() %}
+       <h2>{{ instrument }}</h2>
+
+        {% for detector, files in detectors.items() %}
+            <h3>{{ detector }}</h3>
+    <table>
+            {% for file in files %}
+
+       <tr bgcolor="{{ file[2] }}">
+           <td> <a href=http://{{host}}:{{port}}/file?{{ file[0] }} target="_blank">{{ file[0] }}</a> </td>
+           <td> {{ file[1] }} </td>
+       </tr>
+
+            {% endfor %}
+         </table>
+        <br>
+       {% endfor %}
+        <br>
+    {% endfor %}
+
+</div>
+
+</body>
+</html>
-- 
GitLab