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,
-                stdout=subprocess.PIPE, stderr=open(os.devnull, 'w'))
+                stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
         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:
-                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:
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_PASSWD = "Ps1st1h14_"
+FTP_PASSWD = "0k3D3m4T_"
 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 web.wsgiserver import CherryPyWSGIServer
 
 import config
 import bt
+import users
+
+if config.SECURITY:
+    CherryPyWSGIServer.ssl_certificate = "cacert.pem"
+    CherryPyWSGIServer.ssl_private_key = "privkey.pem"
 
 
 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'
-    torrents_dir = 'tmp/torrents'
+    torrents_dir = config.CIS_TORRENTS_PATH
 
-    def __init__(self, shared, bit_torrent):
+    def __init__(self):
         """
         Initialize Content Ingestion Worker.
-
-        @param shared data shared with the front-end (Service)
         """
 
         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
         """
-
+        
+        print '** Transfering in...'
+        
         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()
 
-        print '** Transfering in finished.'
-
     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
         """
 
+        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)
@@ -73,8 +76,6 @@ class CIWorker(threading.Thread):
             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.
@@ -86,6 +87,8 @@ class CIWorker(threading.Thread):
         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), \
@@ -97,14 +100,14 @@ class CIWorker(threading.Thread):
         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
         """
+        
+        print '** Creating torrents and starting seeding...'
 
         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
-            bit_torrent.start_download( \
+            Server.bit_torrent.start_download( \
                     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.
@@ -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
         """
+        
+        print '** Transfering out...'
 
         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.
         """
+        
+        print '** Cleaning up...'
 
         for f in files:
             os.unlink(os.path.join(path, f))
 
-        print '** Cleaning up finished.'
-
     def run(self):
         while True:
-            job = self.shared.queue.get()
+            job = Server.queue.get()
 
             # * 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'] + "_*")
-                
-            # 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, \
-                    config.OUTPUT_TORRENTS_PATH)
+                    config.WS_TORRENTS_PATH)
             self.transfer_out(thumb_files, self.thumbs_dir, \
-                    config.OUTPUT_THUMBS_PATH)
+                    config.WS_THUMBS_PATH)
             
             # * 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.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).
     """
 
-    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':
-            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)
+        elif request == 'test':
+            return ''
         else:
             web.badrequest()
             return ""
@@ -267,26 +230,45 @@ class Service:
             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.
-            self.shared.load += data["weight"]
-            print 'load in POST is', self.shared.load
+            Server.load += data["weight"]
 
             # Submit job.
-            self.shared.queue.put(data)
+            Server.queue.put(data)
 
             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.
-    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.
-    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.
-INPUT_PATH = 'Downloads'
+WS_UPLOAD_PATH = 'tmp/data/upload'
 # 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.
-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"
-BT_TRACKER = "http://localhost:6969/announce"
+BT_TRACKER = 'http://localhost:6969/announce'
+CIS_TORRENTS_PATH = 'tmp/torrents'
 
 
 # === 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"}