mirror of https://github.com/ekimekim/wubloader
sheet sync: Basic skeleton
parent
3ccace2a73
commit
2b4d2cce90
@ -0,0 +1,16 @@
|
|||||||
|
FROM alpine:3.7
|
||||||
|
# dependencies needed for compiling c extensions
|
||||||
|
# also busybox-extras for telnet for easier use of backdoor
|
||||||
|
# and postgresql-dev as a dependency of psycopg2.
|
||||||
|
# Add postgresql-client for easier debugging of DB issues.
|
||||||
|
RUN apk --update add py2-pip gcc python-dev musl-dev busybox-extras postgresql-dev postgresql-client
|
||||||
|
|
||||||
|
# Install common lib first as it changes less
|
||||||
|
COPY common /tmp/common
|
||||||
|
RUN pip install /tmp/common && rm -r /tmp/common
|
||||||
|
|
||||||
|
# Install actual application
|
||||||
|
COPY sheetsync /tmp/sheetsync
|
||||||
|
RUN pip install /tmp/sheetsync && rm -r /tmp/sheetsync
|
||||||
|
|
||||||
|
ENTRYPOINT ["python2", "-m", "sheetsync", "--base-dir", "/mnt"]
|
@ -0,0 +1,15 @@
|
|||||||
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
|
setup(
|
||||||
|
name = "wubloader-cutter",
|
||||||
|
version = "0.0.0",
|
||||||
|
packages = find_packages(),
|
||||||
|
install_requires = [
|
||||||
|
"argh",
|
||||||
|
"gevent",
|
||||||
|
"prometheus-client",
|
||||||
|
"psycogreen",
|
||||||
|
"psycopg2",
|
||||||
|
"wubloader-common",
|
||||||
|
],
|
||||||
|
)
|
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
import gevent.monkey
|
||||||
|
gevent.monkey.patch_all()
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
|
import argh
|
||||||
|
|
||||||
|
from sheetsync.main import main
|
||||||
|
|
||||||
|
LOG_FORMAT = "[%(asctime)s] %(levelname)8s %(name)s(%(module)s:%(lineno)d): %(message)s"
|
||||||
|
|
||||||
|
level = os.environ.get('WUBLOADER_LOG_LEVEL', 'INFO').upper()
|
||||||
|
logging.basicConfig(level=level, format=LOG_FORMAT)
|
||||||
|
argh.dispatch_command(main)
|
@ -0,0 +1,40 @@
|
|||||||
|
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
import signal
|
||||||
|
|
||||||
|
import argh
|
||||||
|
import gevent.backdoor
|
||||||
|
import gevent.event
|
||||||
|
import prometheus_client as prom
|
||||||
|
|
||||||
|
import common
|
||||||
|
from common.database import DBManager
|
||||||
|
|
||||||
|
|
||||||
|
@argh.arg('worksheet-names', nargs='+', help="The names of the individual worksheets within the sheet to operate on.")
|
||||||
|
def main(dbconnect, sheets_creds_file, sheet_id, worksheet_names, metrics_port=8004, backdoor_port=0):
|
||||||
|
"""dbconnect should be a postgres connection string, which is either a space-separated
|
||||||
|
list of key=value pairs, or a URI like:
|
||||||
|
postgresql://USER:PASSWORD@HOST/DBNAME?KEY=VALUE
|
||||||
|
|
||||||
|
sheets_creds_file should be a json file containing keys 'client_id', 'client_secret' and 'refresh_token'.
|
||||||
|
"""
|
||||||
|
common.PromLogCountsHandler.install()
|
||||||
|
common.install_stacksampler()
|
||||||
|
prom.start_http_server(metrics_port)
|
||||||
|
|
||||||
|
if backdoor_port:
|
||||||
|
gevent.backdoor.BackdoorServer(('127.0.0.1', backdoor_port), locals=locals()).start()
|
||||||
|
|
||||||
|
stop = gevent.event.Event()
|
||||||
|
gevent.signal(signal.SIGTERM, stop.set) # shut down on sigterm
|
||||||
|
|
||||||
|
logging.info("Starting up")
|
||||||
|
|
||||||
|
dbmanager = DBManager(dsn=dbconnect)
|
||||||
|
sheets_creds = json.load(open(sheets_creds_file))
|
||||||
|
|
||||||
|
# TODO the thing
|
||||||
|
|
||||||
|
logging.info("Gracefully stopped")
|
Loading…
Reference in New Issue