Try PaperBoby
In [ ]:
!cd ~ && git clone https://github.com/timkpaine/paperboy.git
Cloning into 'paperboy'... remote: Enumerating objects: 21, done. remote: Counting objects: 100% (21/21), done. remote: Compressing objects: 100% (21/21), done. remote: Total 3388 (delta 3), reused 3 (delta 0), pack-reused 3367 Receiving objects: 100% (3388/3388), 12.04 MiB | 22.38 MiB/s, done. Resolving deltas: 100% (2277/2277), done.
In [ ]:
%%bash
cd ~/paperboy/
sudo -E npm install
sudo -E npm run build
sudo -E pip install -e .
In [ ]:
!sudo -E python -m paperboy
CRITICAL:root:Using SQL backend CRITICAL:root:Using SQL auth CRITICAL:root:Using dummy scheduler [2019-10-13 18:36:29 +0900] [2696] [INFO] Starting gunicorn 19.9.0 [2019-10-13 18:36:29 +0900] [2696] [INFO] Listening at: http://0.0.0.0:8080 (2696) [2019-10-13 18:36:29 +0900] [2696] [INFO] Using worker: sync [2019-10-13 18:36:29 +0900] [2701] [INFO] Booting worker with pid: 2701 CRITICAL:root:Storing user sheng_wei eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjEiLCJuYW1lIjoic2hlbmdfd2VpIn0.oKJsYgZJaj1dLoVR8JgTjfPGp2O8bf3jqmoRux1bNgw 1 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.notebook.NotebookSQL'>, result : 0 - 0 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.job.JobSQL'>, result : 0 - 0 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.report.ReportSQL'>, result : 0 - 0 CRITICAL:root:Storing notebook <Notebook(name='TEST', user='<User(name='sheng_wei')>', privacy='public', level='production'> CRITICAL:root:list : <class 'paperboy.storage.sqla.models.job.JobSQL'>, result : 0 - 0 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.job.JobSQL'>, result : 0 - 0 [2019-10-13 18:43:59 +0900] [2701] [ERROR] Error handling request /api/v1/jobs?action=save Traceback (most recent call last): File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle self.handle_request(listener, req, client, addr) File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request respiter = self.wsgi(environ, resp.start_response) File "/opt/tljh/user/lib/python3.6/site-packages/falcon/api.py", line 244, in __call__ responder(req, resp, **params) File "/home/jupyter-sheng_wei/paperboy/paperboy/resources/job.py", line 21, in on_post resp.body = json.dumps(self.db.jobs.store(req.context['user'], req.params, self.session, self.scheduler)) File "/home/jupyter-sheng_wei/paperboy/paperboy/storage/sqla/job.py", line 42, in store nb_sql = session.query(NotebookSQL).get(int(justid(notebookid))) ValueError: invalid literal for int() with base 10: 'attachment.ipynb' [2019-10-13 18:44:22 +0900] [2701] [ERROR] Error handling request /api/v1/jobs?action=save Traceback (most recent call last): File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle self.handle_request(listener, req, client, addr) File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request respiter = self.wsgi(environ, resp.start_response) File "/opt/tljh/user/lib/python3.6/site-packages/falcon/api.py", line 244, in __call__ responder(req, resp, **params) File "/home/jupyter-sheng_wei/paperboy/paperboy/resources/job.py", line 21, in on_post resp.body = json.dumps(self.db.jobs.store(req.context['user'], req.params, self.session, self.scheduler)) File "/home/jupyter-sheng_wei/paperboy/paperboy/storage/sqla/job.py", line 42, in store nb_sql = session.query(NotebookSQL).get(int(justid(notebookid))) ValueError: invalid literal for int() with base 10: 'attachment.ipynb' [2019-10-13 18:44:23 +0900] [2701] [ERROR] Error handling request /api/v1/jobs?action=save Traceback (most recent call last): File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle self.handle_request(listener, req, client, addr) File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request respiter = self.wsgi(environ, resp.start_response) File "/opt/tljh/user/lib/python3.6/site-packages/falcon/api.py", line 244, in __call__ responder(req, resp, **params) File "/home/jupyter-sheng_wei/paperboy/paperboy/resources/job.py", line 21, in on_post resp.body = json.dumps(self.db.jobs.store(req.context['user'], req.params, self.session, self.scheduler)) File "/home/jupyter-sheng_wei/paperboy/paperboy/storage/sqla/job.py", line 42, in store nb_sql = session.query(NotebookSQL).get(int(justid(notebookid))) ValueError: invalid literal for int() with base 10: 'attachment.ipynb' [2019-10-13 18:44:23 +0900] [2701] [ERROR] Error handling request /api/v1/jobs?action=save Traceback (most recent call last): File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle self.handle_request(listener, req, client, addr) File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request respiter = self.wsgi(environ, resp.start_response) File "/opt/tljh/user/lib/python3.6/site-packages/falcon/api.py", line 244, in __call__ responder(req, resp, **params) File "/home/jupyter-sheng_wei/paperboy/paperboy/resources/job.py", line 21, in on_post resp.body = json.dumps(self.db.jobs.store(req.context['user'], req.params, self.session, self.scheduler)) File "/home/jupyter-sheng_wei/paperboy/paperboy/storage/sqla/job.py", line 42, in store nb_sql = session.query(NotebookSQL).get(int(justid(notebookid))) ValueError: invalid literal for int() with base 10: 'attachment.ipynb' [2019-10-13 18:44:23 +0900] [2701] [ERROR] Error handling request /api/v1/jobs?action=save Traceback (most recent call last): File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle self.handle_request(listener, req, client, addr) File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request respiter = self.wsgi(environ, resp.start_response) File "/opt/tljh/user/lib/python3.6/site-packages/falcon/api.py", line 244, in __call__ responder(req, resp, **params) File "/home/jupyter-sheng_wei/paperboy/paperboy/resources/job.py", line 21, in on_post resp.body = json.dumps(self.db.jobs.store(req.context['user'], req.params, self.session, self.scheduler)) File "/home/jupyter-sheng_wei/paperboy/paperboy/storage/sqla/job.py", line 42, in store nb_sql = session.query(NotebookSQL).get(int(justid(notebookid))) ValueError: invalid literal for int() with base 10: 'attachment.ipynb' CRITICAL:root:Storing job <Job(name='TEST', user='<User(name='sheng_wei')>', notebook='<Notebook(name='TEST', user='<User(name='sheng_wei')>', privacy='public', level='production'>', start='2019-10-13 09:37:00', interval='minutely'> CRITICAL:root:list : <class 'paperboy.storage.sqla.models.notebook.NotebookSQL'>, result : 1 - 1 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.notebook.NotebookSQL'>, result : 1 - 1 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.job.JobSQL'>, result : 1 - 1 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.report.ReportSQL'>, result : 0 - 0 CRITICAL:root:detail : 1, result : <Job(name='TEST', user='<User(name='sheng_wei')>', notebook='<Notebook(name='TEST', user='<User(name='sheng_wei')>', privacy='public', level='production'>', start='2019-10-13 09:37:00', interval='minutely'> CRITICAL:root:list : <class 'paperboy.storage.sqla.models.job.JobSQL'>, result : 1 - 1 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.job.JobSQL'>, result : 1 - 1 CRITICAL:root:detail : 1, result : <Job(name='TEST', user='<User(name='sheng_wei')>', notebook='<Notebook(name='TEST', user='<User(name='sheng_wei')>', privacy='public', level='production'>', start='2019-10-13 09:37:00', interval='minutely'> CRITICAL:root:list : <class 'paperboy.storage.sqla.models.report.ReportSQL'>, result : 0 - 0 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.report.ReportSQL'>, result : 0 - 0 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.report.ReportSQL'>, result : 0 - 0 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.report.ReportSQL'>, result : 0 - 0 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.report.ReportSQL'>, result : 0 - 0 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.notebook.NotebookSQL'>, result : 1 - 1 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.job.JobSQL'>, result : 1 - 1 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.report.ReportSQL'>, result : 0 - 0 CRITICAL:root:detail : 1, result : <Notebook(name='TEST', user='<User(name='sheng_wei')>', privacy='public', level='production'> CRITICAL:root:Storing notebook <Notebook(name='BQ', user='<User(name='sheng_wei')>', privacy='public', level='production'> CRITICAL:root:detail : 2, result : <Notebook(name='BQ', user='<User(name='sheng_wei')>', privacy='public', level='production'> [2019-10-13 18:54:20 +0900] [2701] [ERROR] Error handling request /api/v1/jobs?action=save Traceback (most recent call last): File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle self.handle_request(listener, req, client, addr) File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request respiter = self.wsgi(environ, resp.start_response) File "/opt/tljh/user/lib/python3.6/site-packages/falcon/api.py", line 244, in __call__ responder(req, resp, **params) File "/home/jupyter-sheng_wei/paperboy/paperboy/resources/job.py", line 21, in on_post resp.body = json.dumps(self.db.jobs.store(req.context['user'], req.params, self.session, self.scheduler)) File "/home/jupyter-sheng_wei/paperboy/paperboy/storage/sqla/job.py", line 42, in store nb_sql = session.query(NotebookSQL).get(int(justid(notebookid))) ValueError: invalid literal for int() with base 10: 'BQ' [2019-10-13 18:54:35 +0900] [2701] [ERROR] Error handling request /api/v1/jobs?action=save Traceback (most recent call last): File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle self.handle_request(listener, req, client, addr) File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request respiter = self.wsgi(environ, resp.start_response) File "/opt/tljh/user/lib/python3.6/site-packages/falcon/api.py", line 244, in __call__ responder(req, resp, **params) File "/home/jupyter-sheng_wei/paperboy/paperboy/resources/job.py", line 21, in on_post resp.body = json.dumps(self.db.jobs.store(req.context['user'], req.params, self.session, self.scheduler)) File "/home/jupyter-sheng_wei/paperboy/paperboy/storage/sqla/job.py", line 42, in store nb_sql = session.query(NotebookSQL).get(int(justid(notebookid))) ValueError: invalid literal for int() with base 10: 'BQ' CRITICAL:root:list : <class 'paperboy.storage.sqla.models.notebook.NotebookSQL'>, result : 2 - 2 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.notebook.NotebookSQL'>, result : 2 - 2 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.notebook.NotebookSQL'>, result : 2 - 2 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.notebook.NotebookSQL'>, result : 2 - 2 CRITICAL:root:detail : 2, result : <Notebook(name='BQ', user='<User(name='sheng_wei')>', privacy='public', level='production'> CRITICAL:root:Storing job <Job(name='BQ', user='<User(name='sheng_wei')>', notebook='<Notebook(name='BQ', user='<User(name='sheng_wei')>', privacy='public', level='production'>', start='2019-10-13 09:51:00', interval='minutely'> CRITICAL:root:list : <class 'paperboy.storage.sqla.models.job.JobSQL'>, result : 2 - 2 CRITICAL:root:detail : 2, result : <Job(name='BQ', user='<User(name='sheng_wei')>', notebook='<Notebook(name='BQ', user='<User(name='sheng_wei')>', privacy='public', level='production'>', start='2019-10-13 09:51:00', interval='minutely'> CRITICAL:root:list : <class 'paperboy.storage.sqla.models.report.ReportSQL'>, result : 0 - 0 [2019-10-13 18:59:11 +0900] [2696] [CRITICAL] WORKER TIMEOUT (pid:2701) [2019-10-13 18:59:11 +0900] [2701] [INFO] Worker exiting (pid: 2701) [2019-10-13 18:59:11 +0900] [2863] [INFO] Booting worker with pid: 2863 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.notebook.NotebookSQL'>, result : 2 - 2 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.job.JobSQL'>, result : 2 - 2 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.report.ReportSQL'>, result : 0 - 0 CRITICAL:root:detail : 2, result : <Job(name='BQ', user='<User(name='sheng_wei')>', notebook='<Notebook(name='BQ', user='<User(name='sheng_wei')>', privacy='public', level='production'>', start='2019-10-13 09:51:00', interval='minutely'> CRITICAL:root:list : <class 'paperboy.storage.sqla.models.job.JobSQL'>, result : 2 - 2 [2019-10-13 19:01:55 +0900] [2863] [ERROR] Error handling request /api/v1/reports?action=save Traceback (most recent call last): File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle self.handle_request(listener, req, client, addr) File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request respiter = self.wsgi(environ, resp.start_response) File "/opt/tljh/user/lib/python3.6/site-packages/falcon/api.py", line 244, in __call__ responder(req, resp, **params) File "/home/jupyter-sheng_wei/paperboy/paperboy/resources/report.py", line 21, in on_post resp.body = json.dumps(self.db.reports.store(req.context['user'], req.params, self.session)) File "/home/jupyter-sheng_wei/paperboy/paperboy/storage/sqla/report.py", line 50, in store jb_sql = session.query(JobSQL).get(int(justid(jobid))) ValueError: invalid literal for int() with base 10: 'BQ' [2019-10-13 19:01:57 +0900] [2863] [ERROR] Error handling request /api/v1/reports?action=save Traceback (most recent call last): File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle self.handle_request(listener, req, client, addr) File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request respiter = self.wsgi(environ, resp.start_response) File "/opt/tljh/user/lib/python3.6/site-packages/falcon/api.py", line 244, in __call__ responder(req, resp, **params) File "/home/jupyter-sheng_wei/paperboy/paperboy/resources/report.py", line 21, in on_post resp.body = json.dumps(self.db.reports.store(req.context['user'], req.params, self.session)) File "/home/jupyter-sheng_wei/paperboy/paperboy/storage/sqla/report.py", line 50, in store jb_sql = session.query(JobSQL).get(int(justid(jobid))) ValueError: invalid literal for int() with base 10: 'BQ' [2019-10-13 19:01:57 +0900] [2863] [ERROR] Error handling request /api/v1/reports?action=save Traceback (most recent call last): File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle self.handle_request(listener, req, client, addr) File "/opt/tljh/user/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request respiter = self.wsgi(environ, resp.start_response) File "/opt/tljh/user/lib/python3.6/site-packages/falcon/api.py", line 244, in __call__ responder(req, resp, **params) File "/home/jupyter-sheng_wei/paperboy/paperboy/resources/report.py", line 21, in on_post resp.body = json.dumps(self.db.reports.store(req.context['user'], req.params, self.session)) File "/home/jupyter-sheng_wei/paperboy/paperboy/storage/sqla/report.py", line 50, in store jb_sql = session.query(JobSQL).get(int(justid(jobid))) ValueError: invalid literal for int() with base 10: 'BQ' CRITICAL:root:list : <class 'paperboy.storage.sqla.models.notebook.NotebookSQL'>, result : 2 - 2 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.job.JobSQL'>, result : 2 - 2 CRITICAL:root:list : <class 'paperboy.storage.sqla.models.report.ReportSQL'>, result : 0 - 0 ^C [2019-10-13 19:02:42 +0900] [2696] [INFO] Handling signal: int [2019-10-13 19:02:42 +0900] [2863] [INFO] Worker exiting (pid: 2863)
The versions of dependencies are too low. There are too many bugs.
It seems that the maintenance of PaperBoy has been stopped.
Well. Maybe I can reuse some of the codes.
But I found a new Jupyter Dashboard used by PaperBoy.