cis: bug fixes
authorCălin-Andrei Burloiu <calin.burloiu@gmail.com>
Tue, 7 Feb 2012 17:53:04 +0000 (19:53 +0200)
committerCălin-Andrei Burloiu <calin.burloiu@gmail.com>
Tue, 7 Feb 2012 17:53:04 +0000 (19:53 +0200)
18 files changed:
cis/api/avhandling.py
cis/api/ffmpeg.py [new file with mode: 0644]
cis/api/file_transfer.py
cis/api/ftp.py [new file with mode: 0644]
cis/api/ftp_config.py
cis/cacert.pem [new file with mode: 0644]
cis/cisd.py
cis/config.py
cis/eval/calc.py [new file with mode: 0644]
cis/eval/results-http.txt [new file with mode: 0644]
cis/eval/results-https.txt [new file with mode: 0644]
cis/eval/sec-eval.sh [new file with mode: 0755]
cis/eval/time-http.csv [new file with mode: 0644]
cis/eval/time-https.csv [new file with mode: 0644]
cis/job_test2.json [new file with mode: 0644]
cis/post-json.sh [new file with mode: 0755]
cis/privkey.pem [new file with mode: 0644]
cis/users.py [new file with mode: 0644]

index 808b572..27c9a5d 100644 (file)
@@ -160,7 +160,7 @@ class FFprobeAVInfo(base.BaseAVInfo):
 
         # READ handler for process's output.
         p = subprocess.Popen(args, shell=True,
 
         # READ handler for process's output.
         p = subprocess.Popen(args, shell=True,
-                stdout=subprocess.PIPE, stderr=open(os.devnull, 'w'))
+                stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
         pipe = p.stdout
 
         # WRITE handler for logging.
         pipe = p.stdout
 
         # WRITE handler for logging.
diff --git a/cis/api/ffmpeg.py b/cis/api/ffmpeg.py
new file mode 100644 (file)
index 0000000..e69de29
index 0425280..2f33eac 100644 (file)
@@ -75,8 +75,6 @@ class FTPFileTransferer(base.BaseFileTransferer):
                         % (local_fn, repr(e)))
                 
             try:
                         % (local_fn, repr(e)))
                 
             try:
-                print('remote_path=' + self.remote_path \
-                        + '; crt_fn=' + crt_fn)
                 self.ftp.storbinary('STOR %s' % crt_fn, file_local)
                 file_local.close()
             except ftplib.error_perm as e:
                 self.ftp.storbinary('STOR %s' % crt_fn, file_local)
                 file_local.close()
             except ftplib.error_perm as e:
diff --git a/cis/api/ftp.py b/cis/api/ftp.py
new file mode 100644 (file)
index 0000000..e69de29
index 551cd7d..6cdc0de 100644 (file)
@@ -4,5 +4,5 @@ Configuration file for FTPFileTransferer class.
 
 FTP_HOST = "localhost"
 FTP_USER = "calinburloiu"
 
 FTP_HOST = "localhost"
 FTP_USER = "calinburloiu"
-FTP_PASSWD = "Ps1st1h14_"
+FTP_PASSWD = "0k3D3m4T_"
 FTP_ACCT = ""
 FTP_ACCT = ""
diff --git a/cis/cacert.pem b/cis/cacert.pem
new file mode 100644 (file)
index 0000000..63274c6
--- /dev/null
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIECTCCAvGgAwIBAgIJAJLgqCXzWIpnMA0GCSqGSIb3DQEBBQUAMIGaMQswCQYD
+VQQGEwJSTzETMBEGA1UECAwKU29tZS1TdGF0ZTESMBAGA1UEBwwJQnVjaGFyZXN0
+MQwwCgYDVQQKDANVUEIxDDAKBgNVBAsMA0FDUzEdMBsGA1UEAwwUQ2FsaW4tQW5k
+cmVpIEJ1cmxvaXUxJzAlBgkqhkiG9w0BCQEWGGNhbGluLmJ1cmxvaXVAY3RpLnB1
+Yi5ybzAeFw0xMjAxMjQxMzU0NDdaFw0xNTAxMjMxMzU0NDdaMIGaMQswCQYDVQQG
+EwJSTzETMBEGA1UECAwKU29tZS1TdGF0ZTESMBAGA1UEBwwJQnVjaGFyZXN0MQww
+CgYDVQQKDANVUEIxDDAKBgNVBAsMA0FDUzEdMBsGA1UEAwwUQ2FsaW4tQW5kcmVp
+IEJ1cmxvaXUxJzAlBgkqhkiG9w0BCQEWGGNhbGluLmJ1cmxvaXVAY3RpLnB1Yi5y
+bzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOoiuxWQVszCtwmLHqjw
+NaKyVjNwLToJEizeYFi5vwOAVeYo523ynKhr7FKXfiNcfTCP3DfGPQQrxq2UbPR4
+pYJRjkuoLYyZWGRmOLbMRTOUHfI0mXKTla87l+aoa0Yciw1ni1tOSkvhpZYM6Om+
+Hc5a2CCK0qPlAsQAqIRas570f0QPhEpWKMx4wY6WtzLlg61LJKwyy9NoSnwfwQmB
+wXVZx+J4S0BfivElcFTdkKALvKpHVWASprglbIMcYkvkMmKfoyEOWzymHNiGILUW
+lhcw+wVn+C/XG0WY8uTVCqwPLvPNqGeZJQJKyefer/OsE874o4BKJ84MYGLzBZ40
+xtcCAwEAAaNQME4wHQYDVR0OBBYEFKmwYRQAzZO1Ui1VAZzG635wvoqzMB8GA1Ud
+IwQYMBaAFKmwYRQAzZO1Ui1VAZzG635wvoqzMAwGA1UdEwQFMAMBAf8wDQYJKoZI
+hvcNAQEFBQADggEBAMe0X29XnKEYnPZRe463WFAIdnW9c0BaGmS0U7791pqtJY6s
+Tc5HvxFoY6FOSYrExNRpj4SMAtGFy0q+3hj/xA3JV0ahAr0dS3K8XM1Zr6cC5iHe
+r6oeAyzu/y9kb0POwv9n4ZMr/1GBXH4YnYmi8Cy00rJR7cbPHQFI95NyxtyP+MMR
+647BTvPQHbV5Z06YkoMaHOBoouPNGHUgVoNLcwg7IzFedzScJvkI1NT7gZu7gFhM
+o4NxquzBk3RWWzXjQYV3Ah68xt5rL+U1EUK2YpEcDPFWLc/csYaI+5l+fGlnDiLn
+gl0/Y133DydEIKWNuL0Quxv8RmoujDeg6rlrm4M=
+-----END CERTIFICATE-----
index d286ef7..8284882 100755 (executable)
@@ -9,9 +9,15 @@ import threading
 from Queue import Queue
 import web
 import json
 from Queue import Queue
 import web
 import json
+from web.wsgiserver import CherryPyWSGIServer
 
 import config
 import bt
 
 import config
 import bt
+import users
+
+if config.SECURITY:
+    CherryPyWSGIServer.ssl_certificate = "cacert.pem"
+    CherryPyWSGIServer.ssl_private_key = "privkey.pem"
 
 
 class CIWorker(threading.Thread):
 
 
 class CIWorker(threading.Thread):
@@ -25,34 +31,29 @@ class CIWorker(threading.Thread):
     raw_videos_dir = 'tmp/raw'
     transcoded_videos_dir = 'tmp/media'
     thumbs_dir = 'tmp/thumbs'
     raw_videos_dir = 'tmp/raw'
     transcoded_videos_dir = 'tmp/media'
     thumbs_dir = 'tmp/thumbs'
-    torrents_dir = 'tmp/torrents'
+    torrents_dir = config.CIS_TORRENTS_PATH
 
 
-    def __init__(self, shared, bit_torrent):
+    def __init__(self):
         """
         Initialize Content Ingestion Worker.
         """
         Initialize Content Ingestion Worker.
-
-        @param shared data shared with the front-end (Service)
         """
 
         threading.Thread.__init__(self, name='CIWorker')
 
         """
 
         threading.Thread.__init__(self, name='CIWorker')
 
-        self.shared = shared
-        self.bit_torrent = bit_torrent
-
     def transfer_in(self, raw_video):
         """
         Transfers a raw video file from the Web Server.
 
         @param raw_video raw video file name
         """
     def transfer_in(self, raw_video):
         """
         Transfers a raw video file from the Web Server.
 
         @param raw_video raw video file name
         """
-
+        
+        print '** Transfering in...'
+        
         file_transfer = config.FILE_TRANSFERER_CLASS( \
         file_transfer = config.FILE_TRANSFERER_CLASS( \
-                self.raw_videos_dir, config.INPUT_PATH)
+                self.raw_videos_dir, config.WS_UPLOAD_PATH)
         file_transfer.get([raw_video])
         file_transfer.close()
 
         file_transfer.get([raw_video])
         file_transfer.close()
 
-        print '** Transfering in finished.'
-
     def transcode(self, input_video, video_name, transcode_configs):
         """
         Transcodes a video in each requested formats.
     def transcode(self, input_video, video_name, transcode_configs):
         """
         Transcodes a video in each requested formats.
@@ -62,6 +63,8 @@ class CIWorker(threading.Thread):
         @param transcode_configs a list of dictionaries with format settings
         """
 
         @param transcode_configs a list of dictionaries with format settings
         """
 
+        print '** Transcoding...'
+        
         transcoder = config.TRANSCODER_CLASS( \
                 input_file = os.path.join(self.raw_videos_dir, input_video), \
                 name = video_name, prog_bin = config.TRANSCODER_BIN)
         transcoder = config.TRANSCODER_CLASS( \
                 input_file = os.path.join(self.raw_videos_dir, input_video), \
                 name = video_name, prog_bin = config.TRANSCODER_BIN)
@@ -73,8 +76,6 @@ class CIWorker(threading.Thread):
             transcode_config['output_file'] = \
                     transcoder.transcode(**transcode_config)
 
             transcode_config['output_file'] = \
                     transcoder.transcode(**transcode_config)
 
-        print '** Transcoding finished.'
-
     def extract_thumbs(self, input_video, video_name, thumbs):
         """
         Extracts thumbnail images from a video.
     def extract_thumbs(self, input_video, video_name, thumbs):
         """
         Extracts thumbnail images from a video.
@@ -86,6 +87,8 @@ class CIWorker(threading.Thread):
         thumbnail
         """
 
         thumbnail
         """
 
+        print '** Extracting image thumbnails...'
+        
         # TODO report partial errors
         thumb_extractor = config.THUMB_EXTRACTOR_CLASS( \
                 input_file = os.path.join(self.raw_videos_dir, input_video), \
         # TODO report partial errors
         thumb_extractor = config.THUMB_EXTRACTOR_CLASS( \
                 input_file = os.path.join(self.raw_videos_dir, input_video), \
@@ -97,14 +100,14 @@ class CIWorker(threading.Thread):
         elif type(thumbs) is int and thumbs > 0:
             thumb_extractor.extract_summary_thumbs(thumbs)
 
         elif type(thumbs) is int and thumbs > 0:
             thumb_extractor.extract_summary_thumbs(thumbs)
 
-        print '** Extracting thumbs finished.'
-
     def seed(self, transcode_configs):
         """
         Creates torrents from the videos passed and then stats seeding them.
 
         @param transcode_configs a list of dictionaries with format settings
         """
     def seed(self, transcode_configs):
         """
         Creates torrents from the videos passed and then stats seeding them.
 
         @param transcode_configs a list of dictionaries with format settings
         """
+        
+        print '** Creating torrents and starting seeding...'
 
         for transcode_config in transcode_configs:
             # * CREATE TORRENTS FOR EACH TRANSCODED VIDEO
 
         for transcode_config in transcode_configs:
             # * CREATE TORRENTS FOR EACH TRANSCODED VIDEO
@@ -120,12 +123,10 @@ class CIWorker(threading.Thread):
             output_file = output_file[(output_file.rindex('/') + 1):]
 
             # * SEED TORRENTS
             output_file = output_file[(output_file.rindex('/') + 1):]
 
             # * SEED TORRENTS
-            bit_torrent.start_download( \
+            Server.bit_torrent.start_download( \
                     os.path.join(self.torrents_dir, output_file),
                     self.transcoded_videos_dir)
 
                     os.path.join(self.torrents_dir, output_file),
                     self.transcoded_videos_dir)
 
-        print '** Creating torrents and seeding finished.'
-
     def transfer_out(self, local_files, local_path, remote_path):
         """
         Transfers some local files to a remote path of the Web Server.
     def transfer_out(self, local_files, local_path, remote_path):
         """
         Transfers some local files to a remote path of the Web Server.
@@ -133,27 +134,27 @@ class CIWorker(threading.Thread):
         @param local_files list local files to transfer
         @param remote_path destination path on the Web Server
         """
         @param local_files list local files to transfer
         @param remote_path destination path on the Web Server
         """
+        
+        print '** Transfering out...'
 
         file_transfer = config.FILE_TRANSFERER_CLASS( \
                 local_path, remote_path)
         file_transfer.put(local_files)
         file_transfer.close()
 
 
         file_transfer = config.FILE_TRANSFERER_CLASS( \
                 local_path, remote_path)
         file_transfer.put(local_files)
         file_transfer.close()
 
-        print '** Creating torrents and seeding finished.'
-
     def remove_files(self, files, path):
         """
         Deletes files from a specified path.
         """
     def remove_files(self, files, path):
         """
         Deletes files from a specified path.
         """
+        
+        print '** Cleaning up...'
 
         for f in files:
             os.unlink(os.path.join(path, f))
 
 
         for f in files:
             os.unlink(os.path.join(path, f))
 
-        print '** Cleaning up finished.'
-
     def run(self):
         while True:
     def run(self):
         while True:
-            job = self.shared.queue.get()
+            job = Server.queue.get()
 
             # * TRANSFER RAW VIDEO IN
             self.transfer_in(job['raw_video'])
 
             # * TRANSFER RAW VIDEO IN
             self.transfer_in(job['raw_video'])
@@ -181,81 +182,43 @@ class CIWorker(threading.Thread):
                     if os.path.isfile(os.path.join( \
                             self.thumbs_dir, f))]
             thumb_files = fnmatch.filter(files, job['name'] + "_*")
                     if os.path.isfile(os.path.join( \
                             self.thumbs_dir, f))]
             thumb_files = fnmatch.filter(files, job['name'] + "_*")
-                
-            # Raw video files.
-            raw_files = [f for f in os.listdir(self.raw_videos_dir) \
-                    if os.path.isfile(os.path.join( \
-                            self.raw_videos_dir, f))]
 
             # * TRANSFER TORRENTS AND THUMBNAIL IMAGES OUT
             self.transfer_out(torrent_files, self.torrents_dir, \
 
             # * TRANSFER TORRENTS AND THUMBNAIL IMAGES OUT
             self.transfer_out(torrent_files, self.torrents_dir, \
-                    config.OUTPUT_TORRENTS_PATH)
+                    config.WS_TORRENTS_PATH)
             self.transfer_out(thumb_files, self.thumbs_dir, \
             self.transfer_out(thumb_files, self.thumbs_dir, \
-                    config.OUTPUT_THUMBS_PATH)
+                    config.WS_THUMBS_PATH)
             
             # * CLEANUP RAW VIDEOS AND THUMBNAIL IMAGES
             
             # * CLEANUP RAW VIDEOS AND THUMBNAIL IMAGES
-            self.remove_files(raw_files, self.raw_videos_dir)
+            self.remove_files([ job['raw_video'] ], self.raw_videos_dir)
             self.remove_files(thumb_files, self.thumbs_dir)
 
             # * JOB FINISHED
             self.remove_files(thumb_files, self.thumbs_dir)
 
             # * JOB FINISHED
-            self.shared.queue.task_done()
-            print 'load in run is', self.shared.load
-            self.shared.load -= job['weight']
-
-class Shared:
-    """
-    Shared data between Service (front-end) and CIWorker (back-end).
-
-    @member queue a list of dictionaries with the following keys:
-        <ul>
-            <li>raw_video</li>
-            <li>name: a video name which must be a valid file name</li>
-            <li>transcode_configs: a list of transcode configuration
-            dictionaries having the keys as the parameters of
-            api.BaseTranscoder.transcode(...)</li>
-            <li>thumbs: string 'random' for extracting a thumbnail
-            image from a random video position or a positive integer which
-            represents the number of summary thumbnails to be extracted</li>
-        </ul>
-    @member load total weight of the jobs from the queue 
-    """
-
-    def __init__(self):
-        # Jobs queue.
-        self.queue = Queue()
+            Server.queue.task_done()
+            Server.load -= job['weight']
 
 
-        # Sever load.
-        self.load = 0
 
 
-
-class Service:
+class Server:
     """
     Implementation of the RESTful web service which constitutes the interface
     with the client (web server).
     """
 
     """
     Implementation of the RESTful web service which constitutes the interface
     with the client (web server).
     """
 
-    def __init__(self):
-        # Shared data with back-end (CIWorker).
-        self.shared = Shared()
-
-        global bit_torrent
-
-        # Worker thread.
-        ci_worker = CIWorker(self.shared, bit_torrent)
-        ci_worker.daemon = True
-        ci_worker.start()
+    #def __init__(self):
+        #pass
         
         
-    def __del__(self):
-        self.shared.queue.join()
+    #def __del__(self):
+        #pass
     
     def GET(self, request):
         #web.header('Cache-Control', 'no-cache')
 
         if request == 'get_load':
     
     def GET(self, request):
         #web.header('Cache-Control', 'no-cache')
 
         if request == 'get_load':
-            resp = {"load": self.shared.load}
-            print 'load in GET is', self.shared.load
+            resp = {"load": Server.load}
             web.header('Content-Type', 'application/json')
             return json.dumps(resp)
             web.header('Content-Type', 'application/json')
             return json.dumps(resp)
+        elif request == 'test':
+            return ''
         else:
             web.badrequest()
             return ""
         else:
             web.badrequest()
             return ""
@@ -267,26 +230,45 @@ class Service:
             json_data = web.data()
             data = json.loads(json_data)
 
             json_data = web.data()
             data = json.loads(json_data)
 
+            # Authenticate user.
+            if config.SECURITY and \
+                    not self.authenticate(data["username"], data["password"]):
+                return "Authentication failed!"
+
             # Add job weight to CIS load.
             # Add job weight to CIS load.
-            self.shared.load += data["weight"]
-            print 'load in POST is', self.shared.load
+            Server.load += data["weight"]
 
             # Submit job.
 
             # Submit job.
-            self.shared.queue.put(data)
+            Server.queue.put(data)
 
             return 'Job submitted.'
         else:
             web.badrequest()
             return ""
 
 
             return 'Job submitted.'
         else:
             web.badrequest()
             return ""
 
+    def authenticate(self, username, password):
+        if not config.SECURITY:
+            return True
+        if users.users[username] == password:
+            return True
+        else:
+            web.forbidden()
+            return False
+
 
 if __name__ == '__main__':
     # The BitTorrent object implements a NextShare (Tribler) BitTorrent
     # client for seeding, downloading etc.
 
 if __name__ == '__main__':
     # The BitTorrent object implements a NextShare (Tribler) BitTorrent
     # client for seeding, downloading etc.
-    global bit_torrent
-    bit_torrent = bt.BitTorrent()
+    Server.bit_torrent = bt.BitTorrent()
+    Server.queue = Queue()
+    Server.load = 0
+    
+    # Worker thread.
+    ci_worker = CIWorker()
+    ci_worker.daemon = True
+    ci_worker.start()
 
     # Web service.
 
     # Web service.
-    urls = ('/(.*)', 'Service')
-    service = web.application(urls, globals())
-    service.run()
+    urls = ('/(.*)', 'Server')
+    app = web.application(urls, globals())
+    app.run()
index fcc629b..868253a 100644 (file)
@@ -7,17 +7,21 @@ from api import file_transfer
 
 # === FILE TRANSFER CONFIGURATIONS ===
 # Path from the Web Server where the raw input video file is stored.
 
 # === FILE TRANSFER CONFIGURATIONS ===
 # Path from the Web Server where the raw input video file is stored.
-INPUT_PATH = 'Downloads'
+WS_UPLOAD_PATH = 'tmp/data/upload'
 # Path from the Web Server where the output torrent files will be stored.
 # Path from the Web Server where the output torrent files will be stored.
-OUTPUT_TORRENTS_PATH = 'Downloads/tmp1'
+WS_TORRENTS_PATH = 'tmp/data/torrents'
 # Path from the Web Server where the output thumbnail image files will be
 # stored.
 # Path from the Web Server where the output thumbnail image files will be
 # stored.
-OUTPUT_THUMBS_PATH = 'Downloads/tmp2'
+WS_THUMBS_PATH = 'tmp/data/thumbs'
+
+
+SECURITY = False
 
 
 # === BITTORRENT CONFIGURATIONS ===
 #BT_TRACKER = "http://p2p-next-10.grid.pub.ro:6969/announce"
 
 
 # === BITTORRENT CONFIGURATIONS ===
 #BT_TRACKER = "http://p2p-next-10.grid.pub.ro:6969/announce"
-BT_TRACKER = "http://localhost:6969/announce"
+BT_TRACKER = 'http://localhost:6969/announce'
+CIS_TORRENTS_PATH = 'tmp/torrents'
 
 
 # === EXTERNAL PROGRAMS API CLASSES ===
 
 
 # === EXTERNAL PROGRAMS API CLASSES ===
diff --git a/cis/eval/calc.py b/cis/eval/calc.py
new file mode 100644 (file)
index 0000000..d154dc2
--- /dev/null
@@ -0,0 +1,17 @@
+import sys
+
+if __name__ == '__main__':
+    input_file = open(sys.argv[1], 'r')
+
+    s = 0.0
+    c = 0
+    while True:
+        line = input_file.readline()
+        if line == '':
+            break
+
+        s += float(line)
+        c += 1
+
+    print "sum =", s
+    print "avg =", (s/c)
diff --git a/cis/eval/results-http.txt b/cis/eval/results-http.txt
new file mode 100644 (file)
index 0000000..4ed176a
--- /dev/null
@@ -0,0 +1,2 @@
+sum = 32.755571024
+avg = 0.032755571024
diff --git a/cis/eval/results-https.txt b/cis/eval/results-https.txt
new file mode 100644 (file)
index 0000000..97165d8
--- /dev/null
@@ -0,0 +1,2 @@
+sum = 74.047656492
+avg = 0.074047656492
diff --git a/cis/eval/sec-eval.sh b/cis/eval/sec-eval.sh
new file mode 100755 (executable)
index 0000000..afd8a08
--- /dev/null
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+
+if [ $# -ne 1 ]; then
+       echo "usage: $0 <http | https>" >&2
+       exit 1
+fi
+
+TEST_TYPE=$1
+
+case $TEST_TYPE in
+       "http")
+               CMD="curl http://localhost:8080/test"
+               ;;
+       "https")
+               CMD="curl https://localhost:8080/test --insecure"
+               ;;
+       *)
+               echo "invalid parameter!" >&2
+               ;;
+esac
+
+cd ..
+
+for i in $(seq 1 1000); do
+       t1=$(date +%s.%N)
+       $CMD 2> /dev/null
+       t2=$(date +%s.%N)
+       
+       delta_t=$(echo "$t2 - $t1" | bc)
+       echo $delta_t
+done
diff --git a/cis/eval/time-http.csv b/cis/eval/time-http.csv
new file mode 100644 (file)
index 0000000..f35a965
--- /dev/null
@@ -0,0 +1,1000 @@
+.054691750
+.031394909
+.033408555
+.038617001
+.033337107
+.034686989
+.017438199
+.023982734
+.032784220
+.031079980
+.031040600
+.029470779
+.033327565
+.034412518
+.035816483
+.034127210
+.033275076
+.019624814
+.029906929
+.030031059
+.030521901
+.034467326
+.035687285
+.029619602
+.035044358
+.033695338
+.031096192
+.030336866
+.030414653
+.030065577
+.030646418
+.034451641
+.034790463
+.030290271
+.032473526
+.027195352
+.030269655
+.030037965
+.030074753
+.030175862
+.034231091
+.012332335
+.013538785
+.030805156
+.035696263
+.034736296
+.032126991
+.031807488
+.012586722
+.014035339
+.021265543
+.035541224
+.035065632
+.037900563
+.015945942
+.016436438
+.031749281
+.031544341
+.030533853
+.036333574
+.033996075
+.036237902
+.037177304
+.028604212
+.035822446
+.033672447
+.036676631
+.033885670
+.030836569
+.035503619
+.026299116
+.036039001
+.032227840
+.032240161
+.028175230
+.036398957
+.032101298
+.030438176
+.030247194
+.033561631
+.027524391
+.035799218
+.032713063
+.032959321
+.035861043
+.031129773
+.029998400
+.030184887
+.036197876
+.029033619
+.011976199
+.022591301
+.026852739
+.035133515
+.036280102
+.031243971
+.030393535
+.035611292
+.034253803
+.034362389
+.027744525
+.035986221
+.032768905
+.032992291
+.036476543
+.030599147
+.035923786
+.033992217
+.030914670
+.033607500
+.027740567
+.035691129
+.032455686
+.033096542
+.036183644
+.031683878
+.035633648
+.033649374
+.031125638
+.033528852
+.027537947
+.035858418
+.032751295
+.032923745
+.035687965
+.031046269
+.030530029
+.036367601
+.033679177
+.034827692
+.011721345
+.015708972
+.029625751
+.036019016
+.033393519
+.036380980
+.033506090
+.030449086
+.030171602
+.030641922
+.029625225
+.036244612
+.032849267
+.033162436
+.027304613
+.035965836
+.033233918
+.030986208
+.036064524
+.036016871
+.029723386
+.035548515
+.033237946
+.030103196
+.029385847
+.035143741
+.033848791
+.031220247
+.030181509
+.035636675
+.026380786
+.036548931
+.032536713
+.032361262
+.035156813
+.030930677
+.030457444
+.030114788
+.030072804
+.036312516
+.023402894
+.011761885
+.027180890
+.036203019
+.035822261
+.031684900
+.030540758
+.035543960
+.034133886
+.034400129
+.036261842
+.031359858
+.030599456
+.033428960
+.035884692
+.031200988
+.030620153
+.035756697
+.034139159
+.034384615
+.027989374
+.036234374
+.032481128
+.033979733
+.035734867
+.031688729
+.036068413
+.035705130
+.035383336
+.035836693
+.031863659
+.035991459
+.033846250
+.027267879
+.035731586
+.035282497
+.036191086
+.035016185
+.035750448
+.030211119
+.012113843
+.015455789
+.036106079
+.030028127
+.035866516
+.035386930
+.036042013
+.035334205
+.036190650
+.035358154
+.031338565
+.035549894
+.033414393
+.027456072
+.035809311
+.035319427
+.035809708
+.034671820
+.036217621
+.035295872
+.035673068
+.035028698
+.035349736
+.025449137
+.036232068
+.033315763
+.035611258
+.035446956
+.035839424
+.036013073
+.031814594
+.035471335
+.033569394
+.027360073
+.031846987
+.036176552
+.035896368
+.035443192
+.035794753
+.011773039
+.013846966
+.029452748
+.032550360
+.036709305
+.033616550
+.036416452
+.033624659
+.035587153
+.033967355
+.036045466
+.035108358
+.035894108
+.035418512
+.027990272
+.036281626
+.034957447
+.035808864
+.035158697
+.035496984
+.035374457
+.032147463
+.034557427
+.034468109
+.027616195
+.035598078
+.034913087
+.035873152
+.035524726
+.035918128
+.035500040
+.035691699
+.032296730
+.033824917
+.035747702
+.034622098
+.034766620
+.036037699
+.035157756
+.011555798
+.013489357
+.037147412
+.035080811
+.035850840
+.033774347
+.036429271
+.036051219
+.036273292
+.035135394
+.035775189
+.038283540
+.036092057
+.036113205
+.036103077
+.029093906
+.035736952
+.035400545
+.036124796
+.033002669
+.034721828
+.035702234
+.037515095
+.035590722
+.033357328
+.027454137
+.037106114
+.031486355
+.033558052
+.035684970
+.035451336
+.035580723
+.035652301
+.036645871
+.034749677
+.027820743
+.035822641
+.035139649
+.038481773
+.016361228
+.017425107
+.036582127
+.036655628
+.035977447
+.034741704
+.028122642
+.035899977
+.034732557
+.035882272
+.035180311
+.035810985
+.035290912
+.031023477
+.036198352
+.033597166
+.027247223
+.036176303
+.034731185
+.035855260
+.035201134
+.036130499
+.035253737
+.036031664
+.025570526
+.036111967
+.029902818
+.035743953
+.035918649
+.035730719
+.034890696
+.035971257
+.036812233
+.030762861
+.034789286
+.034819760
+.027872715
+.036538538
+.037688978
+.013907895
+.017865286
+.028027746
+.035464785
+.035147938
+.036185789
+.035009791
+.027663537
+.035929925
+.035372537
+.035864290
+.034928346
+.031768289
+.035545459
+.034119413
+.035713755
+.033321122
+.029080571
+.035999472
+.035320368
+.035895817
+.034957786
+.032720134
+.036084149
+.033841494
+.035692231
+.035016897
+.028004789
+.036006633
+.034756322
+.035533146
+.036187177
+.032676996
+.035573060
+.034166701
+.036202968
+.034416256
+.027662865
+.036102536
+.020561776
+.013978706
+.015518600
+.035937366
+.035853913
+.035005921
+.036159771
+.034807072
+.027463302
+.035750273
+.034820772
+.036116612
+.035275057
+.030280724
+.036160928
+.033850525
+.035740530
+.035955382
+.028362670
+.035832910
+.034880291
+.035709249
+.035648302
+.032410032
+.035838754
+.033690198
+.035759624
+.034428875
+.027693324
+.036482064
+.033958518
+.033564136
+.035585365
+.035018224
+.035847217
+.033864717
+.035650347
+.035507358
+.028644779
+.035156960
+.016022859
+.014017582
+.016582304
+.034535873
+.038922423
+.035950821
+.035083628
+.035763663
+.038746063
+.035735189
+.036793536
+.035547828
+.031039428
+.037383241
+.035119925
+.035311945
+.034588978
+.035708213
+.032361497
+.036240683
+.038467964
+.036779463
+.036508074
+.035747246
+.036051439
+.035471361
+.035409672
+.035064395
+.027947119
+.036065141
+.034886906
+.031528892
+.035789842
+.035678285
+.035861454
+.034673924
+.035517049
+.034706624
+.028032753
+.012743126
+.016914769
+.013770490
+.026983040
+.035439905
+.035396461
+.035637067
+.035644223
+.036691749
+.032725165
+.036073480
+.035512575
+.032154950
+.035386422
+.035074552
+.035775440
+.034598399
+.035498082
+.034602930
+.027693194
+.036452984
+.035217457
+.031416823
+.035739879
+.033958414
+.035790252
+.034112789
+.035591222
+.035124936
+.028243821
+.036044183
+.035564437
+.035867559
+.034733965
+.036019749
+.035330792
+.035975994
+.035489628
+.035633919
+.029958161
+.014383138
+.016111834
+.022473144
+.035008484
+.035530770
+.035169301
+.036523308
+.035023225
+.035825332
+.032566777
+.035782772
+.035841645
+.036250586
+.035124335
+.036081878
+.035529040
+.032339057
+.036223555
+.034048218
+.027408303
+.035795280
+.035007139
+.031712262
+.036462611
+.035886286
+.035446339
+.035783392
+.035200046
+.036267355
+.033065667
+.035953014
+.034729764
+.032682068
+.035432733
+.035406114
+.036015097
+.033885324
+.035813982
+.038415469
+.011730444
+.013655457
+.015525017
+.029507438
+.036200758
+.034969987
+.035619797
+.034296039
+.035187804
+.035358916
+.028001406
+.035799644
+.035337928
+.035887478
+.035246426
+.032238113
+.036106159
+.033778366
+.035117624
+.035205919
+.036296650
+.034452934
+.036080521
+.035096306
+.035853997
+.035381858
+.035894259
+.034751109
+.035520532
+.034796192
+.035735971
+.034342645
+.035844291
+.034858658
+.036138682
+.035664313
+.035831281
+.034864245
+.035849597
+.020575381
+.015392528
+.016240630
+.036261556
+.036780667
+.035293238
+.035634916
+.043779153
+.036206433
+.034780422
+.031529368
+.035590055
+.037512343
+.035723377
+.036368443
+.035033098
+.035651595
+.036150760
+.035840582
+.035467467
+.035481669
+.035562503
+.035769836
+.035919380
+.038667484
+.034243109
+.031642108
+.035513797
+.033716988
+.030547012
+.035619592
+.035091971
+.035580719
+.035476994
+.036236815
+.035156528
+.032179760
+.035484531
+.035434076
+.044677208
+.014189296
+.035297176
+.035658200
+.035240127
+.037218589
+.034548215
+.035747862
+.035303706
+.035723407
+.035049981
+.036030471
+.035727445
+.035779163
+.035748248
+.035978670
+.035839274
+.032335759
+.035620588
+.033660504
+.036281776
+.035173992
+.031910811
+.035486811
+.035072548
+.035338871
+.035086970
+.032360946
+.035929374
+.033783518
+.036057263
+.034491962
+.035627334
+.026645555
+.032088409
+.032053394
+.033437018
+.030899537
+.035420155
+.012706039
+.016259013
+.013910356
+.031931179
+.037417845
+.035042811
+.035775695
+.035393117
+.032143182
+.036181253
+.033838257
+.035538287
+.035508600
+.036097985
+.035381051
+.035809732
+.035338660
+.035522882
+.035649695
+.028719944
+.035687065
+.035442089
+.035631854
+.035591238
+.036242583
+.035508144
+.035490980
+.033249146
+.035654305
+.027840552
+.035777930
+.035158928
+.031789953
+.034348092
+.035730443
+.035984828
+.035415845
+.035525568
+.035982468
+.028488425
+.020542507
+.016146829
+.013925530
+.014761239
+.033972080
+.035050312
+.035799805
+.035077979
+.035632556
+.033360039
+.035689124
+.036363086
+.035706584
+.036015218
+.035586020
+.035604717
+.035605921
+.035276965
+.032591513
+.035539786
+.034198423
+.035243404
+.035525428
+.035954445
+.036264427
+.035602833
+.035293643
+.035599135
+.035904968
+.028500773
+.036063232
+.035023430
+.031649404
+.034363947
+.035577862
+.032448724
+.035229458
+.034922328
+.035785562
+.032467979
+.019588913
+.015963838
+.013286435
+.012901911
+.018908213
+.034506681
+.035317928
+.037346573
+.035950186
+.029932570
+.033526952
+.036430934
+.034872675
+.036332636
+.035530130
+.035565129
+.035441413
+.036000730
+.035269138
+.029356525
+.035994837
+.034730226
+.036188705
+.035727131
+.036017890
+.033068644
+.033364509
+.035749195
+.035370453
+.029004008
+.036077680
+.035243960
+.031228170
+.034926101
+.035216057
+.035584587
+.035089080
+.035675664
+.035819064
+.029658509
+.036249984
+.029243662
+.014037540
+.013360924
+.012995230
+.036061106
+.033201345
+.035761067
+.035281686
+.035820221
+.035220452
+.035191887
+.025924774
+.018366143
+.019816596
+.017273700
+.027156395
+.035281852
+.036600603
+.032702840
+.036138857
+.036668513
+.033593167
+.035527077
+.035122681
+.035691976
+.035255982
+.035975126
+.035875326
+.028604452
+.035952576
+.035671890
+.036511306
+.035377644
+.036104225
+.035549578
+.035908932
+.034926546
+.032784152
+.028460185
+.036878518
+.034474668
+.036171847
+.023814355
+.015669559
+.014324122
+.019957660
+.035681972
+.035998775
+.029034781
+.036028696
+.036067847
+.035945971
+.035974937
+.035879650
+.035166630
+.035979862
+.035405957
+.036113686
+.033060526
+.036696858
+.035194669
+.035919732
+.036418546
+.036577371
+.034870390
+.036004829
+.034775755
+.042282764
+.035579326
+.036378230
+.036290631
+.034768900
+.031535622
+.036414702
+.034502136
+.036074662
+.031890936
+.036637567
+.023862065
+.030937142
+.036693674
+.035568195
+.029379112
+.021192335
+.012649493
+.011154727
+.030454066
+.035840096
+.023442907
+.030380542
+.035811777
+.035742814
+.035918904
+.035661105
+.036544607
+.035438838
+.036222853
+.035272400
+.028003825
+.032672064
+.036337743
+.036000108
+.035699342
+.035371228
+.035549853
+.036071490
+.036055685
+.034897256
+.027910986
+.030342053
+.033884813
+.035868425
+.034773737
+.035802305
+.034920232
+.035940764
+.037875075
+.036411009
+.029306177
+.035148828
+.035892836
+.036754588
+.036289775
+.018538723
+.011944423
+.011115037
+.012673058
+.017866692
+.027508548
+.023476911
+.030735505
+.036135240
+.035803643
+.036053129
+.035785477
+.034806354
+.032201294
+.035248215
+.022041269
+.031472203
+.035719809
+.035458642
+.036763563
+.026471727
+.031216514
+.035416591
+.036381171
+.035409725
+.027404017
+.023193745
+.031846548
+.035882387
+.035771391
+.036336692
+.034599034
+.035448489
+.036348567
+.032936430
+.029286811
+.032689407
+.035238950
+.036361638
+.036088519
+.034363716
+.035806901
+.035495972
+.013009491
+.011766376
+.011404966
+.012385724
+.022851984
+.036316831
+.034054978
+.035837204
+.035276700
+.036305665
+.034961326
+.031436657
+.025380836
+.030975014
+.034193812
+.036079237
+.036489246
+.035495797
+.035961095
+.035401582
+.036097259
+.035495571
+.026945707
+.031905065
+.033721793
+.036208336
+.035856272
+.035720424
+.035750528
+.036067926
+.036079051
+.036217120
+.027467783
diff --git a/cis/eval/time-https.csv b/cis/eval/time-https.csv
new file mode 100644 (file)
index 0000000..8cf24eb
--- /dev/null
@@ -0,0 +1,1000 @@
+.068621671
+.074500681
+.075764463
+.079166939
+.075356083
+.075950173
+.076499938
+.076813253
+.076566294
+.071975000
+.068304170
+.074820960
+.076340086
+.068812717
+.077314208
+.076537158
+.076331221
+.076648986
+.076320759
+.076416179
+.081519855
+.058132687
+.066569121
+.070674975
+.077786548
+.065737192
+.062574468
+.064616465
+.075757868
+.067878111
+.081114334
+.082673822
+.064314481
+.062342675
+.076821357
+.066379291
+.074285012
+.071635877
+.076120098
+.078916277
+.077124869
+.076544024
+.077684742
+.078081230
+.077440810
+.076428727
+.075841415
+.076820009
+.076836206
+.076928705
+.072455468
+.071037721
+.058564615
+.077054575
+.077331197
+.069099913
+.075724172
+.071425315
+.075919163
+.077360768
+.077984615
+.076735427
+.076812993
+.077531330
+.076971787
+.066501211
+.076961665
+.076620627
+.077019275
+.077654112
+.076124789
+.068792166
+.075025374
+.077082934
+.079419155
+.067189822
+.076382728
+.078382342
+.076565071
+.076544921
+.076992264
+.077007457
+.076810201
+.076455362
+.078900710
+.077121281
+.077434800
+.069438299
+.072475274
+.077707079
+.068128617
+.077522209
+.076923337
+.077320768
+.076835534
+.077324962
+.076804644
+.072603990
+.075988301
+.077079971
+.076081065
+.076774591
+.076547636
+.076920681
+.076839562
+.077310093
+.077049419
+.072528056
+.070674853
+.070217797
+.076804444
+.077945067
+.071658428
+.075993151
+.076798680
+.077650264
+.077176581
+.077384842
+.076665875
+.077276662
+.077410986
+.076632790
+.076709844
+.077067363
+.077302962
+.078389869
+.077238346
+.059650229
+.066408132
+.076651386
+.077679896
+.057084314
+.076838881
+.076738142
+.074352898
+.077480099
+.066607693
+.075868403
+.077023219
+.077594332
+.076795067
+.077061144
+.077069088
+.077484704
+.077093784
+.079855919
+.073035724
+.065186125
+.076631226
+.076729704
+.077081230
+.077142935
+.077015641
+.077341805
+.077207551
+.077158666
+.077092075
+.069833113
+.075961153
+.076515724
+.076787801
+.077367363
+.081673482
+.072323106
+.076925668
+.067106712
+.067295968
+.078146773
+.077086021
+.077329737
+.077753122
+.076763431
+.077408030
+.076864569
+.078000362
+.077244029
+.076974694
+.076743079
+.076902074
+.077450271
+.077060388
+.079192643
+.077383234
+.077169880
+.053835554
+.067550839
+.079411002
+.077392996
+.077025323
+.076955184
+.078004947
+.077187746
+.077866373
+.076836676
+.076721797
+.077059119
+.077200284
+.069783967
+.074961830
+.074251647
+.076982307
+.076637065
+.069154436
+.058901457
+.067261722
+.075836927
+.077023189
+.070843977
+.075468682
+.077124288
+.076925177
+.075255911
+.076833413
+.077192166
+.077652705
+.076878039
+.078973005
+.070370796
+.075360723
+.077058473
+.078792546
+.076543232
+.064109424
+.065237031
+.076962121
+.077561794
+.077080458
+.073556081
+.076022673
+.076806117
+.078594889
+.077444759
+.077509750
+.077422021
+.074978498
+.080464755
+.076292413
+.074649026
+.073942877
+.076670420
+.077073818
+.072970078
+.054056276
+.075855293
+.076677236
+.077203376
+.077112226
+.077521161
+.077077526
+.077008746
+.077511810
+.076358798
+.079793448
+.077331657
+.077707789
+.077361966
+.077715512
+.074439136
+.078378404
+.071667293
+.062090229
+.059883316
+.076126703
+.077469128
+.077564570
+.078473784
+.075931010
+.077492868
+.078282506
+.073304972
+.077043605
+.061347579
+.070727183
+.077492180
+.077641504
+.072018007
+.076256633
+.077287558
+.077601539
+.075491249
+.062579516
+.077396474
+.077526283
+.077175543
+.077177107
+.077013797
+.076511189
+.079396544
+.076869009
+.077203307
+.077179227
+.077027785
+.076994890
+.076620456
+.072478054
+.076744122
+.077297279
+.077298011
+.063493746
+.048293608
+.077104879
+.077742152
+.076897048
+.078822263
+.076802444
+.069114365
+.075548244
+.076781236
+.077526613
+.077169273
+.081170472
+.070541699
+.077165891
+.077271330
+.077166543
+.076630244
+.080229846
+.059236104
+.064123877
+.071868842
+.076116696
+.076926674
+.076674854
+.079171739
+.075618757
+.075658046
+.076546348
+.076389017
+.076413463
+.073268880
+.076428924
+.076427604
+.076469776
+.076439101
+.077484077
+.076174295
+.075329172
+.055884611
+.076236792
+.076429047
+.076263498
+.076789239
+.076359610
+.076197638
+.073776911
+.075679084
+.076854506
+.076264961
+.074956730
+.076479808
+.076443626
+.076093994
+.073727168
+.076051984
+.069471049
+.074939974
+.053856231
+.067532694
+.079166182
+.076348149
+.076907086
+.076250433
+.076778059
+.071974894
+.074076985
+.075665869
+.076024241
+.076072415
+.070209146
+.075373277
+.076843511
+.077906364
+.076455608
+.077186318
+.076371417
+.054033759
+.066635308
+.076180004
+.078007423
+.076164659
+.076306023
+.076923718
+.077200340
+.053042670
+.086546739
+.070782417
+.077274859
+.077311772
+.077376318
+.077470366
+.078053914
+.075753483
+.077443991
+.078654439
+.059720116
+.063132418
+.076913435
+.077294287
+.077215915
+.063727455
+.077459256
+.079491530
+.073883809
+.077293420
+.076960742
+.077271776
+.076998332
+.077188899
+.072805240
+.076181260
+.076166081
+.077076910
+.079810457
+.063461708
+.057883504
+.077688630
+.092422633
+.076749519
+.077338497
+.075325143
+.079775052
+.075725520
+.077240505
+.077301164
+.077528038
+.076956122
+.077553675
+.077557278
+.077338929
+.080979400
+.078296342
+.077196771
+.054643435
+.045449604
+.074475140
+.078058769
+.077662105
+.077501171
+.077471760
+.077478093
+.076886789
+.077553165
+.077339019
+.077283303
+.077470050
+.077440684
+.077334368
+.078720824
+.077726767
+.077474871
+.077149454
+.063793109
+.060967808
+.074828778
+.077526554
+.078189991
+.077580556
+.077902933
+.057913566
+.071808242
+.075735683
+.077435832
+.077711738
+.078049859
+.071067053
+.076659309
+.076538532
+.077566209
+.077952829
+.077666426
+.077894447
+.046850743
+.052157699
+.051122945
+.068406913
+.078194296
+.077587772
+.077908789
+.077810006
+.077694309
+.077589973
+.076413823
+.077040803
+.077552748
+.071140611
+.076207756
+.076648595
+.077666996
+.074372988
+.077867536
+.073241738
+.053355765
+.070312293
+.077622872
+.077000287
+.077962376
+.077364431
+.077580832
+.072590965
+.077177313
+.077516225
+.074235189
+.065669960
+.077123005
+.077444814
+.077485400
+.077085258
+.079104597
+.080497357
+.077646611
+.052685085
+.060234927
+.073821326
+.077164528
+.077411437
+.077085509
+.077413643
+.077018509
+.077696364
+.079359501
+.077372935
+.077208238
+.078022527
+.078361280
+.076517934
+.077943849
+.077308444
+.077976778
+.074547622
+.053558893
+.067300488
+.077998752
+.077755307
+.076961704
+.077554837
+.077584680
+.080065309
+.078467144
+.077943769
+.074652715
+.072237419
+.076936688
+.074742444
+.077636492
+.078397883
+.071009081
+.075279669
+.077407925
+.063233495
+.061334928
+.076986603
+.075233715
+.077573565
+.078640221
+.077272373
+.077888078
+.075124531
+.078523206
+.077879173
+.075994293
+.078375997
+.079272844
+.074066923
+.077301449
+.077223457
+.077813263
+.072055251
+.071498134
+.050944604
+.076908510
+.078242586
+.077506548
+.079342913
+.077150147
+.076905376
+.077661033
+.075011457
+.078084988
+.078480254
+.078239614
+.075898462
+.078347387
+.074706284
+.078037199
+.077313521
+.071408371
+.072150111
+.053196589
+.069106649
+.080435547
+.077975204
+.075312328
+.079063119
+.077785491
+.074147460
+.077735407
+.077571351
+.077847848
+.080618618
+.078089378
+.077496974
+.077948589
+.077088236
+.079448447
+.074749328
+.081753086
+.049020313
+.070467642
+.077762939
+.077961600
+.075269687
+.077136685
+.077489023
+.078158615
+.070949493
+.075498245
+.076627517
+.077648269
+.078038638
+.077935630
+.077984286
+.078187230
+.076577865
+.077681790
+.077472661
+.053686796
+.059535482
+.077211536
+.076642628
+.078192321
+.078594172
+.076512332
+.076446041
+.077432721
+.077068075
+.077776614
+.077751648
+.077418359
+.075395843
+.077677064
+.069740424
+.075831605
+.075429593
+.077861492
+.068474655
+.035145031
+.055024030
+.076520235
+.069226975
+.075995491
+.068928680
+.075357087
+.076817833
+.077995391
+.070144419
+.074469977
+.072202070
+.078031392
+.077618652
+.059810682
+.076786688
+.074793553
+.076460188
+.072345594
+.076183914
+.053545242
+.051892851
+.079042573
+.077802689
+.078107233
+.069898390
+.074857841
+.074398203
+.073178141
+.076581311
+.077019150
+.077011151
+.077502444
+.078295581
+.077266330
+.076773903
+.057372952
+.067078421
+.076696297
+.076913217
+.054606618
+.066459507
+.078801602
+.077911235
+.077766081
+.075265618
+.078066321
+.077883657
+.078055883
+.070070622
+.055841616
+.074030972
+.075313441
+.065641484
+.078068957
+.066437233
+.077295757
+.069449359
+.075921134
+.077774736
+.053736693
+.056914569
+.078119466
+.064849731
+.078413647
+.076877634
+.077783781
+.070221673
+.075122292
+.078202264
+.076947634
+.077510823
+.077567953
+.078330665
+.078968645
+.076106387
+.077310415
+.077411503
+.077248238
+.071024296
+.044405340
+.064941525
+.080456666
+.074197357
+.072760514
+.074981047
+.082216813
+.077690059
+.078364848
+.071967502
+.074031151
+.077964456
+.076564765
+.076639651
+.072466623
+.077317695
+.074252864
+.076688946
+.077646410
+.060626127
+.048129263
+.061797156
+.075643012
+.077304099
+.072313662
+.072999195
+.079209731
+.076655441
+.075597114
+.078198075
+.076226108
+.076630454
+.085067097
+.075267848
+.077302076
+.076833309
+.074734254
+.078222093
+.075806478
+.052932680
+.048478534
+.075987527
+.070752716
+.072468302
+.070507385
+.075155968
+.075036499
+.077745480
+.076490261
+.076504415
+.076626745
+.077928949
+.072884219
+.074079696
+.070744652
+.075394307
+.074151289
+.078919433
+.076217052
+.055744572
+.068809250
+.077517988
+.070987918
+.072559909
+.071436575
+.075546393
+.074397557
+.076741666
+.078055381
+.076532612
+.077767138
+.077309783
+.070860551
+.076235344
+.058353518
+.075710114
+.074745470
+.076669753
+.077326922
+.042385756
+.040100081
+.056543784
+.068311708
+.073208794
+.071007595
+.075645988
+.074426097
+.071525843
+.073363510
+.071606726
+.075601376
+.074358718
+.071357752
+.072634110
+.071847135
+.072495389
+.077872717
+.071417462
+.074306530
+.070334529
+.061740594
+.033946167
+.072685143
+.073970098
+.077017827
+.077122681
+.077677766
+.072928889
+.073559458
+.071304746
+.058642027
+.077124223
+.076099055
+.077906970
+.072962576
+.073444624
+.076534739
+.072163988
+.073987308
+.076771093
+.075130098
+.034042755
+.062476819
+.075976037
+.072499047
+.073934148
+.076366451
+.072682883
+.061873041
+.071654140
+.076035815
+.074846699
+.075744087
+.077489524
+.072610328
+.073138370
+.076791303
+.077009758
+.077823166
+.075826331
+.078391864
+.053785929
+.059585370
+.077215541
+.071015261
+.074180164
+.076944085
+.077965217
+.078363239
+.078749002
+.079410280
+.077721530
+.077535611
+.077922025
+.071394615
+.072213894
+.076497097
+.077473658
+.076553025
+.077245950
+.075032751
+.034127636
+.037901894
+.077033421
+.072370516
+.073404647
+.077529851
+.077737713
+.076275884
+.078249702
+.077033728
+.077488984
+.075759196
+.079295149
+.071753503
+.073278188
+.078100458
+.075722272
+.077014456
+.076897127
+.071999507
+.054007376
+.052183541
+.075998412
+.073033101
+.072995280
+.076660482
+.077380693
+.077607377
+.069205367
+.075355851
+.077657275
+.078177178
+.076661860
+.077805511
+.077569055
+.072357998
+.073549175
+.065422520
+.077108682
+.077033953
+.055691308
+.046491477
+.077604546
+.076276878
+.078137458
+.071913373
+.074203740
+.076547190
+.076764877
+.076772842
+.058242842
+.063578601
+.076813129
+.075819181
+.079993391
+.076952634
+.077438124
+.077289472
+.069660111
+.077387334
+.057044571
+.052206678
+.057301645
+.070830511
+.078456194
+.075436008
+.078682286
+.077910524
+.076815010
+.077299956
+.077176475
+.078287075
+.075637981
+.075739165
+.073040122
+.076469223
+.077069359
+.078478864
+.077430096
+.078028326
+.057154705
+.042162974
+.077403310
+.077817183
+.076692815
+.077864760
+.078081055
+.076818821
+.079122784
+.075922090
+.078690669
+.078112396
+.079981154
+.077564355
+.078155839
+.072279243
+.073949707
+.076684467
+.076621384
+.076766085
+.036492534
+.043107769
+.076644511
+.077541996
+.077541794
+.076973426
+.077785500
+.077057646
+.078062944
+.072444006
+.073382076
+.076625393
+.078513042
+.077151141
diff --git a/cis/job_test2.json b/cis/job_test2.json
new file mode 100644 (file)
index 0000000..a7c439a
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "raw_video": "2009-06-28_Beatles-Obladi_600p.ogv",
+    "name": "beatles",
+    "weight": 10,
+    "transcode_configs": [
+        {
+            "container": "webm",
+            "a_codec": "vorbis",
+            "a_bitrate": "128k",
+            "v_codec": "vp8",
+            "v_bitrate": "480k",
+            "v_resolution": "640x480"
+        }
+    ],
+    "thumbs": 4
+}
diff --git a/cis/post-json.sh b/cis/post-json.sh
new file mode 100755 (executable)
index 0000000..eac61f7
--- /dev/null
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+if [ $# -ne 1 ]; then
+       echo "usage: $0 json_file" >&2
+       exit 1
+fi
+
+JSON_FILE="$1"
+
+curl -H application/json --data-binary @"$JSON_FILE" http://localhost:8080/ingest_content
diff --git a/cis/privkey.pem b/cis/privkey.pem
new file mode 100644 (file)
index 0000000..74a34e1
--- /dev/null
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA6iK7FZBWzMK3CYseqPA1orJWM3AtOgkSLN5gWLm/A4BV5ijn
+bfKcqGvsUpd+I1x9MI/cN8Y9BCvGrZRs9HilglGOS6gtjJlYZGY4tsxFM5Qd8jSZ
+cpOVrzuX5qhrRhyLDWeLW05KS+Gllgzo6b4dzlrYIIrSo+UCxACohFqznvR/RA+E
+SlYozHjBjpa3MuWDrUskrDLL02hKfB/BCYHBdVnH4nhLQF+K8SVwVN2QoAu8qkdV
+YBKmuCVsgxxiS+QyYp+jIQ5bPKYc2IYgtRaWFzD7BWf4L9cbRZjy5NUKrA8u882o
+Z5klAkrJ596v86wTzvijgEonzgxgYvMFnjTG1wIDAQABAoIBAEwLt8QLO4YKADVD
+UFQCoQkU71aJqsbcx2B3YcevnNDgUAYPZwuY7zTsyLcSqU+G7MpnD1m2M381ULR0
+LudAgFFRd+wu1YyDCeiiIu2MbzWPeCKA3w4NzWI68t1h+mWtQ6S46tRfG1aGFagk
+zUmODFRHwUbgkAXXjgxnQlSquQh5NgmjguE2mvejYbJGejTwbTfBkeu6ceEe5zt9
+opmFmPgxhkAyGuAi2zmJClBxUYjrhsVVTXzqE3w6rumVjZQiwlC+b9A9/yqKXG6x
+gqaQui/LyL9R1IA1mJ7DdyGR2SN5eHqkg7SQGNrRp8BP7APWVu0/QCIQ83EGlZ1H
+Jl1nFoECgYEA9wvMre8FgIu7bfoWTXRcO5yjiRh9K5fhoDJhwQVXuAkEfLRLrpxg
+atEBPROkQtjBrgVl0Cm0zaW9z0FY0zH2nP/2hEDyJO48W6BUjRCoJbfm8bwJcKU5
+alS47HJ3jA2t7A6tj3+vchcYDGcmNBG7gDujwMGvYQ5pFEgl2XXIaaECgYEA8p8k
+jEN7/83hah9JlvKUgzXInOJiNqriO2vdDUehrB9nkaLULcaWq12khtixO/O6Jk1f
+t/A1SgXYy7Ni7DEKDqsf12Fyi/paLjd5BetAgxRW2aXMpd9OhYUv6F4Zuk2gHQJ1
+Yue5C8LITBdxZvusLv1Cr0138/gdaJXlvDsejXcCgYAd3cRR5sqgfsQbCJf3pzCb
+WFWA9n/zbDovtseQoUe4jQaI2PcpVehmIXxn2N8L4c6QbkCfyNr93aKz0q+dYLXy
+xxMTbBKaGl8bqKdwImphnPkDknsFrkPhsfplQ3VmbiTvm9qptYMNZPNYVIQO2XH0
+j8E9RW0ha6+SbyJ8RrwC4QKBgCi/n8TLBMV2z5giPxrSDS1oWBQ5VWN3Gd3/BLZZ
+RIcDE0L7hQVXKDEJ3jsjo8i865PJRP1Ao8KV7s5vh3rB1b2W8hcbb8CgwIqomHPt
+Cf256chON2vYcHiuYNh3DX0j0nNs2UhOQN7/zOIywcIZHNcbhBqrOS1Ji67oFhii
+GUSLAoGBANc+gV8s9vhl8ONNO9QGBAVUQyxuobR1gX9cREYs8E4n/ybnmMBsxoHI
+/pST1pPidvVwT9HEIArp4P94osx4xOUhwC23qHf3r0N+15LecAVCduB3nrZRVXGy
+H48fViK3cO2zK/bk+RdcSbmH4zp+XASv4jtBanGO875WFwxGxyl+
+-----END RSA PRIVATE KEY-----
diff --git a/cis/users.py b/cis/users.py
new file mode 100644 (file)
index 0000000..99406ec
--- /dev/null
@@ -0,0 +1 @@
+users = {"student": "parola_student", "user": "password"}