Oncall is a calendar tool designed for scheduling and managing on-call shifts. It can be used as source of dynamic ownership info for paging systems like http://iris.claims.

Overview

Oncall Gitter chat Build Status

See admin docs for information on how to run and manage Oncall.

Development setup

Prerequisites

  • Debian/Ubuntu - sudo apt-get install libsasl2-dev python-dev libldap2-dev libssl-dev python-pip python-setuptools mysql-server mysql-client

Install

python setup.py develop
pip install -e '.[dev]'

Setup mysql schema:

mysql -u root -p < ./db/schema.v0.sql

Setup app config by editing configs/config.yaml.

Optionally, you can import dummy data for testing:

mysql -u root -p -o oncall < ./db/dummy_data.sql

Run

One of the following commands:

  • goreman start
  • procman start
  • make serve
  • oncall-dev ./configs/config.yaml

Test

make test

Check out https://github.com/linkedin/oncall/issues for a list of outstanding issues, and tackle any one that catches your interest. Contributions are expected to be tested thoroughly and submitted with unit/end-to-end tests; look in the e2e directory for our suite of end-to-end tests.

Comments
  • Gui checkbox & global flag not working

    Gui checkbox & global flag not working

    Sooo, I won't lie and say I'm a JS expert, but I have a pretty good understanding of what's going on in oncall.js. But for the life of me, I can't get a checkbox I've added to Browse Teams to work. I need the renderTeams function to be able to interrogate the value of a gui checkbox. So I tried adding a checkbox to index.html. I tacked on a change event and it wouldn't fire unless I put it in a window.onload event. But it worked. Then I tried setting a global flag based on the checkbox and I can't get the renderdata function to read it properly. Sooo I need some help here. What is the recommended way to add a checkbox element onto the browse teams page : and how do I get it's change event to be read.

    opened by UserHIJ 9
  • wrong message of

    wrong message of "user jdoe is already in the roster"

    0 build docker as the ops/packer

    1 run --name mysql -e MYSQL_ROOT_PASSWORD='1234' -d mysql --default-authentication-plugin=mysql_native_password

    2 docker run --name oncall -d --link mysql:mysql -p 8080:8080 -e DOCKER_DB_BOOTSTRAP=1 quay.io/iris/oncall

    3 manually add new user "test" into table user & user_contact or in the oncall docker, setup oncall-admin then create user test (with extra docker param of -p 16652:16652)

    note that: it seems I have to fix https://stackoverflow.com/questions/45368336/error-keyerror-255-when-executing-pymysql-connect https://stackoverflow.com/questions/50156520/cannot-connect-to-a-local-mysql-db-with-sqlalchemy-on-windows-machine in order to make oncall-admin work (so is iris)

    4 log as "test", create team of 'team foo", add roster of 'roster bar', then try to add user of "jdoe" to "roster bar", it complains "user jdoe is already in the roster"

    I have checked out the api code, where the exception is except-ed generally, meaning that any db error would tell user "user * is already in the roster".

    anything I missed?

    opened by liuzhen 7
  • Add Note to Install OpenLDAP

    Add Note to Install OpenLDAP

    Received the following error when running python setup.py develop

        In file included from Modules/LDAPObject.c:9:0:
        Modules/errors.h:8:18: fatal error: lber.h: No such file or directory
        compilation terminated.
        error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    

    Should save a few minutes by specifying it's a prerequisite. Maybe provide platform specific instruction? apt-get install libldap2-dev ?

    opened by manufacturedba 6
  • LDAP authentication

    LDAP authentication

    Thanks for providing this code! I'm currently trying to implement one of the Docker images available into a Kubernetes cluster, and I'm able to get to the point where the website loads.

    However, after following the guides for the ldap configuration, I run into the error on the login page of 'invalid username or password'.

    The only log that appears to change is var/log/uwsgi/error.log, which mentions the falcon-cors message noted in #204 .

    Is there an example config.yaml containing a 'known good' ldap configuration for AD? The server I use currently accepts ldap (not ldaps) requests.

    Thanks in advance for your help!

    opened by dan2020802 5
  • Allow Users to Edit their Contact Info

    Allow Users to Edit their Contact Info

    I currently use user_sync.py via ldap_sync.py to pull down all users' contact information from LDAP, but many users either do not want their full contact info published in LDAP or want different contact info used for Oncall. This leaves us with a "hybrid" source of user attributes.

    I've been using oncall-admin as a stopgap to edit user contact info that differs from LDAP, but are there any plans/features underway to integrate the same functionality into the user's respective Settings page?

    I would be happy to write such functionality into Oncall if I have your support for the feature.

    opened by p6knewman 5
  • make build fails on MarkupSafe

    make build fails on MarkupSafe

    Running docker build against the Dockerfile results in the same output.

    #13 14.76 Collecting MarkupSafe>=2.0 (from jinja2->oncall==1.4.3)
    #13 14.83   Downloading https://files.pythonhosted.org/packages/bf/10/ff66fea6d1788c458663a84d88787bae15d45daa16f6b3ef33322a51fc7e/MarkupSafe-2.0.1.tar.gz
    #13 14.93     Complete output from command python setup.py egg_info:
    #13 14.93     Traceback (most recent call last):
    #13 14.93       File "<string>", line 1, in <module>
    #13 14.93       File "/tmp/pip-build-ci8_gs00/MarkupSafe/setup.py", line 61, in <module>
    #13 14.93         run_setup(True)
    #13 14.93       File "/tmp/pip-build-ci8_gs00/MarkupSafe/setup.py", line 44, in run_setup
    #13 14.93         ext_modules=ext_modules if with_binary else [],
    #13 14.93       File "/home/oncall/env/lib/python3.6/site-packages/setuptools/__init__.py", line 129, in setup
    #13 14.93         return distutils.core.setup(**attrs)
    #13 14.93       File "/usr/lib/python3.6/distutils/core.py", line 121, in setup
    #13 14.93         dist.parse_config_files()
    #13 14.93       File "/home/oncall/env/lib/python3.6/site-packages/setuptools/dist.py", line 494, in parse_config_files
    #13 14.93         ignore_option_errors=ignore_option_errors)
    #13 14.93       File "/home/oncall/env/lib/python3.6/site-packages/setuptools/config.py", line 106, in parse_configuration
    #13 14.93         meta.parse()
    #13 14.93       File "/home/oncall/env/lib/python3.6/site-packages/setuptools/config.py", line 382, in parse
    #13 14.93         section_parser_method(section_options)
    #13 14.93       File "/home/oncall/env/lib/python3.6/site-packages/setuptools/config.py", line 355, in parse_section
    #13 14.93         self[name] = value
    #13 14.93       File "/home/oncall/env/lib/python3.6/site-packages/setuptools/config.py", line 173, in __setitem__
    #13 14.93         value = parser(value)
    #13 14.93       File "/home/oncall/env/lib/python3.6/site-packages/setuptools/config.py", line 430, in _parse_version
    #13 14.93         version = self._parse_attr(value)
    #13 14.93       File "/home/oncall/env/lib/python3.6/site-packages/setuptools/config.py", line 305, in _parse_attr
    #13 14.93         module = import_module(module_name)
    #13 14.93       File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    #13 14.93         return _bootstrap._gcd_import(name[level:], package, level)
    #13 14.93       File "<frozen importlib._bootstrap>", line 994, in _gcd_import
    #13 14.93       File "<frozen importlib._bootstrap>", line 971, in _find_and_load
    #13 14.93       File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
    #13 14.93     ModuleNotFoundError: No module named 'markupsafe'
    #13 14.93
    #13 14.93     ----------------------------------------
    #13 15.04 Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-ci8_gs00/MarkupSafe/
    
    opened by glassrye 4
  • User sync removes already existing users

    User sync removes already existing users

    I think this is a misconfiguration on my part, but every loop of the oncall-user-sync it get the users from LDAP server and tries to add them to the database. But if the user already exists it gives the error for each user: (1062, "Duplicate entry '<my user on ldap server>' for key 'user.username_unique'")

    And then the users gets removed from the database (also its contacts etc). The next iteration it inserts all the users present in the LDAP server. Next time it removes them again for the same reason given above. This does not make sense. I am not being able to understand why it is happening. Can someone give correct configuration example for this features?

    opened by pavanfhw 4
  • Unable to run oncall - throws ModuleNotFoundError

    Unable to run oncall - throws ModuleNotFoundError

    Hi,

    I followed the instructions given to install and run oncall but ran into this issue : Note - python version is 3.6.3, using virtualenv , OS is linux SLES11.

    (venv) $ make serve oncall-dev ./configs/config.yaml Traceback (most recent call last): File "/nfs/user1/workspace/oncall/venv/bin/oncall-dev", line 11, in <module> load_entry_point('oncall', 'console_scripts', 'oncall-dev')() File "/nfs/user1/workspace/oncall/venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 565, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/nfs/user1/workspace/oncall/venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2631, in load_entry_point return ep.load() File "/nfs/user1/workspace/oncall/venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2291, in load return self.resolve() File "/nfs/user1/workspace/oncall/venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2297, in resolve module = __import__(self.module_name, fromlist=['__name__'], level=0) File "/nfs/user1/workspace/oncall/src/oncall/bin/run_server.py", line 11, in <module> import oncall.utils File "/nfs/user1/workspace/oncall/src/oncall/utils.py", line 13, in <module> from constants import ONCALL_REMINDER ModuleNotFoundError: No module named 'constants' make: *** [serve] Error 1

    I tried adding the local directory to the PATH variable, but receive the same error. Can someone please advise ?

    opened by arjunnath 4
  •  libldap2-dev

    libldap2-dev

    Dear Maintainer,

    I'm maybe stupid but I'm not able to install the app. Any of Linux distro I get the same error massage:

    The following packages have unmet dependencies: libldap2-dev : Depends: libldap-2.4-2 (= 2.4.40+dfsg-1+deb8u3) but 2.4.44+dfsg-5+deb9u1~bpo8+1 is to be installed E: Unable to correct problems, you have held broken packages.

    Please help me overcome!

    Many thanks! Zoltan

    opened by jegkiralyfi 4
  • Login info

    Login info

    I have installed everything and it works, but I can not find any username and password to use for login via the web page. Is there a default admin user or how should I make a new one?

    opened by kjetilmjos 4
  • user and password to portal?

    user and password to portal?

    hello, what is the easiest way to create user/pass in the portal?

    i had to load the dummy_data.sql and then login using root/root. any other password would not work? and i did not see the password defined in the sql file.

    once i login, i don't see a way to create additional users? do i have to insert into database or is there a simpler way to add users?

    opened by joshrain 4
  • Is there a way to create users locally without having to put them in via mysql?

    Is there a way to create users locally without having to put them in via mysql?

    would like to be able to create users locally with DB, and not have to use MYSQL to input the new users. We don't want to integrate to company LDAP server, instead local authentication with encrypted password stored in DB. Local authentication module also should be plugged and configured to use before start.

    Thank you in advance!

    opened by alskin96 1
  • fix: notifier state get's never persisted in database

    fix: notifier state get's never persisted in database

    • every time the notification starts, it reports a corrupted state because the state never gets stored in the database. saving the state in the database using UPDATE sql only works when there is already one entry in the table, otherwise the query will run through with zero updated rows. so in the case when the state cannot be loaded, we properly create one record inside the notifier_state table
    opened by roock 0
  • Access denied for user 'root'@'localhost'

    Access denied for user 'root'@'localhost'

    I'm not sure if this is a bug or something I'm doing wrong, but I have a fully up-to-date Ubuntu 20.04 VM that I'm trying to get Oncall to run on, and I'm having issues.

    As it appears many of the python2 packages are either unavailable or simply deprecated in Ubuntu 20.04, I handled with prerequisites with the following command:

    sudo apt-get install libsasl2-dev python3-dev libldap2-dev libssl-dev python3-pip python3-setuptools mysql-server mysql-client

    Then after unpacking version 1.4.5 into /opt, I did cd /opt/oncall-1.4.5 and then ran the following:

    python3 setup.py develop
    pip3 install -e '.[dev]'
    

    The setup finally finished but did complain:

    ERROR: sphinx-rtd-theme 1.0.0 has requirement docutils<0.18, but you'll have docutils 0.18.1 which is incompatible.
    ERROR: sphinx-rtd-theme 1.0.0 has requirement sphinx>=1.6, but you'll have sphinx 1.5.6 which is incompatible.
    ERROR: sphinxcontrib-httpdomain 1.8.0 has requirement Sphinx>=1.6, but you'll have sphinx 1.5.6 which is incompatible.
    

    Set up my MySQL schema:

    mysql -u root -p < ./db/schema.v0.sql
    

    I then start the software (oncall-dev ./configs/config.yaml or make serve) and the page loads correctly on port 8080. However when I attempt to login, I get an error that the username and/or password is invalid. Server side I see this:

    [2022-06-01 15:38:26 -0600] [437216] [INFO] Starting gunicorn 20.1.0
    [2022-06-01 15:38:26 -0600] [437216] [INFO] Listening at: http://0.0.0.0:8080 (437216)
    [2022-06-01 15:38:26 -0600] [437216] [INFO] Using worker: gevent
    [2022-06-01 15:38:26 -0600] [437218] [INFO] Booting worker with pid: 437218
    [2022-06-01 15:38:26 -0600] [437219] [INFO] Booting worker with pid: 437219
    [2022-06-01 15:38:26 -0600] [437220] [INFO] Booting worker with pid: 437220
    [2022-06-01 15:38:26 -0600] [437221] [INFO] Booting worker with pid: 437221
    INFO:oncall.auth:Auth debug turned on.
    INFO:oncall.auth:Auth debug turned on.
    INFO:oncall.auth:Auth debug turned on.
    INFO:oncall.auth:Auth debug turned on.
    Building bundle: bundles/libs.js
    INFO:webassets:Building bundle: bundles/libs.js
    2022-06-01 15:38:26,860 INFO webassets Building bundle: bundles/libs.js
    Building bundle: bundles/oncall.bundle.js
    INFO:webassets:Building bundle: bundles/oncall.bundle.js
    2022-06-01 15:38:26,866 INFO webassets Building bundle: bundles/oncall.bundle.js
    Building bundle: bundles/libs.css
    INFO:webassets:Building bundle: bundles/libs.css
    2022-06-01 15:38:26,868 INFO webassets Building bundle: bundles/libs.css
    Building bundle: bundles/oncall.css
    INFO:webassets:Building bundle: bundles/oncall.css
    2022-06-01 15:38:26,871 INFO webassets Building bundle: bundles/oncall.css
    Building bundle: bundles/loginsplash.css
    INFO:webassets:Building bundle: bundles/loginsplash.css
    2022-06-01 15:38:26,872 INFO webassets Building bundle: bundles/loginsplash.css
    Building bundle: bundles/loginsplash.bundle.js
    INFO:webassets:Building bundle: bundles/loginsplash.bundle.js
    2022-06-01 15:38:26,872 INFO webassets Building bundle: bundles/loginsplash.bundle.js
    10.215.90.86 - - [01/Jun/2022:15:38:29 -0600] "GET / HTTP/1.1" 200 109744 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.30"
    10.215.90.86 - - [01/Jun/2022:15:38:29 -0600] "GET /static/bundles/oncall.css?6fc23d98 HTTP/1.1" 200 0 "http://example.com:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.30"
    10.215.90.86 - - [01/Jun/2022:15:38:29 -0600] "GET /static/bundles/libs.css?d0c82c20 HTTP/1.1" 200 0 "http://example.com:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.30"
    10.215.90.86 - - [01/Jun/2022:15:38:29 -0600] "GET /static/images/oncall_logo_white.png HTTP/1.1" 200 0 "http://example.com:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.30"
    10.215.90.86 - - [01/Jun/2022:15:38:29 -0600] "GET /static/bundles/oncall.bundle.js?261df4d9 HTTP/1.1" 200 0 "http://example.com:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.30"
    10.215.90.86 - - [01/Jun/2022:15:38:29 -0600] "GET /static/bundles/libs.js?fc4ec214 HTTP/1.1" 200 0 "http://example.com:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.30"
    10.215.90.86 - - [01/Jun/2022:15:38:29 -0600] "GET /api/v0/iris_settings HTTP/1.1" 200 354 "http://example.com:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.30"
    10.215.90.86 - - [01/Jun/2022:15:38:29 -0600] "GET /api/v0/timezones/ HTTP/1.1" 200 123 "http://example.com:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.30"
    [2022-06-01 15:38:29 -0600] [437219] [ERROR] Error handling request /api/v0/roles/
    Traceback (most recent call last):
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/engine/base.py", line 3280, in _wrap_pool_connect
        return fn()
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 310, in connect
        return _ConnectionFairy._checkout(self)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 868, in _checkout
        fairy = _ConnectionRecord.checkout(pool)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 476, in checkout
        rec = pool._do_get()
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/impl.py", line 146, in _do_get
        self._dec_overflow()
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/util/langhelpers.py", line 70, in __exit__
        compat.raise_(
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/util/compat.py", line 208, in raise_
        raise exception
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/impl.py", line 143, in _do_get
        return self._create_connection()
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 256, in _create_connection
        return _ConnectionRecord(self)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 371, in __init__
        self.__connect()
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 666, in __connect
        pool.logger.debug("Error on connect(): %s", e)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/util/langhelpers.py", line 70, in __exit__
        compat.raise_(
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/util/compat.py", line 208, in raise_
        raise exception
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 661, in __connect
        self.dbapi_connection = connection = pool._invoke_creator(self)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/engine/create.py", line 590, in connect
        return dialect.connect(*cargs, **cparams)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/engine/default.py", line 597, in connect
        return self.dbapi.connect(*cargs, **cparams)
      File "/usr/local/lib/python3.8/dist-packages/PyMySQL-1.0.2-py3.8.egg/pymysql/connections.py", line 353, in __init__
        self.connect()
      File "/usr/local/lib/python3.8/dist-packages/PyMySQL-1.0.2-py3.8.egg/pymysql/connections.py", line 633, in connect
        self._request_authentication()
      File "/usr/local/lib/python3.8/dist-packages/PyMySQL-1.0.2-py3.8.egg/pymysql/connections.py", line 907, in _request_authentication
        auth_packet = self._read_packet()
      File "/usr/local/lib/python3.8/dist-packages/PyMySQL-1.0.2-py3.8.egg/pymysql/connections.py", line 725, in _read_packet
        packet.raise_for_error()
      File "/usr/local/lib/python3.8/dist-packages/PyMySQL-1.0.2-py3.8.egg/pymysql/protocol.py", line 221, in raise_for_error
        err.raise_mysql_exception(self._data)
      File "/usr/local/lib/python3.8/dist-packages/PyMySQL-1.0.2-py3.8.egg/pymysql/err.py", line 143, in raise_mysql_exception
        raise errorclass(errno, errval)
    pymysql.err.OperationalError: (1698, "Access denied for user 'root'@'localhost'")
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "/usr/local/lib/python3.8/dist-packages/gunicorn/workers/base_async.py", line 55, in handle
        self.handle_request(listener_name, req, client, addr)
      File "/usr/local/lib/python3.8/dist-packages/gunicorn/workers/ggevent.py", line 127, in handle_request
        super().handle_request(listener_name, req, sock, addr)
      File "/usr/local/lib/python3.8/dist-packages/gunicorn/workers/base_async.py", line 108, in handle_request
        respiter = self.wsgi(environ, resp.start_response)
      File "/opt/oncall/src/oncall/app.py", line 118, in __call__
        return self.app(env, start_response)
      File "/usr/local/lib/python3.8/dist-packages/Beaker-1.11.0-py3.8.egg/beaker/middleware.py", line 156, in __call__
        return self.wrap_app(environ, session_start_response)
      File "/usr/local/lib/python3.8/dist-packages/falcon-1.4.1-py3.8.egg/falcon/api.py", line 244, in __call__
        responder(req, resp, **params)
      File "/opt/oncall/src/oncall/api/v0/roles.py", line 97, in on_get
        connection = db.connect()
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/engine/base.py", line 3313, in raw_connection
        return self._wrap_pool_connect(self.pool.connect, _connection)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/engine/base.py", line 3283, in _wrap_pool_connect
        Connection._handle_dbapi_exception_noconnection(
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/engine/base.py", line 2117, in _handle_dbapi_exception_noconnection
        util.raise_(
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/util/compat.py", line 208, in raise_
        raise exception
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/engine/base.py", line 3280, in _wrap_pool_connect
        return fn()
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 310, in connect
        return _ConnectionFairy._checkout(self)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 868, in _checkout
        fairy = _ConnectionRecord.checkout(pool)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 476, in checkout
        rec = pool._do_get()
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/impl.py", line 146, in _do_get
        self._dec_overflow()
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/util/langhelpers.py", line 70, in __exit__
        compat.raise_(
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/util/compat.py", line 208, in raise_
        raise exception
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/impl.py", line 143, in _do_get
        return self._create_connection()
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 256, in _create_connection
        return _ConnectionRecord(self)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 371, in __init__
        self.__connect()
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 666, in __connect
        pool.logger.debug("Error on connect(): %s", e)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/util/langhelpers.py", line 70, in __exit__
        compat.raise_(
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/util/compat.py", line 208, in raise_
        raise exception
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/pool/base.py", line 661, in __connect
        self.dbapi_connection = connection = pool._invoke_creator(self)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/engine/create.py", line 590, in connect
        return dialect.connect(*cargs, **cparams)
      File "/usr/local/lib/python3.8/dist-packages/SQLAlchemy-1.4.37-py3.8-linux-x86_64.egg/sqlalchemy/engine/default.py", line 597, in connect
        return self.dbapi.connect(*cargs, **cparams)
      File "/usr/local/lib/python3.8/dist-packages/PyMySQL-1.0.2-py3.8.egg/pymysql/connections.py", line 353, in __init__
        self.connect()
      File "/usr/local/lib/python3.8/dist-packages/PyMySQL-1.0.2-py3.8.egg/pymysql/connections.py", line 633, in connect
        self._request_authentication()
      File "/usr/local/lib/python3.8/dist-packages/PyMySQL-1.0.2-py3.8.egg/pymysql/connections.py", line 907, in _request_authentication
        auth_packet = self._read_packet()
      File "/usr/local/lib/python3.8/dist-packages/PyMySQL-1.0.2-py3.8.egg/pymysql/connections.py", line 725, in _read_packet
        packet.raise_for_error()
      File "/usr/local/lib/python3.8/dist-packages/PyMySQL-1.0.2-py3.8.egg/pymysql/protocol.py", line 221, in raise_for_error
        err.raise_mysql_exception(self._data)
      File "/usr/local/lib/python3.8/dist-packages/PyMySQL-1.0.2-py3.8.egg/pymysql/err.py", line 143, in raise_mysql_exception
        raise errorclass(errno, errval)
    sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1698, "Access denied for user 'root'@'localhost'")
    (Background on this error at: https://sqlalche.me/e/14/e3q8)
    

    I can login to the database without issue from the command prompt (e.g. mysql -u root -p) with no password. I've assigned the root user the same password in the config.yaml, but with the same results.

    opened by Th3L1nuxGuy 1
  • User allow/prevent calendar modification by non admin user

    User allow/prevent calendar modification by non admin user

    Add a configuration in config.yaml to authorize or not user that are not admin of a team to modify a team calendar.

    The objective of that mod is to prevent 'simple' user to modify team calendar.

    opened by Bbillyben 0
  • ICal Authentication : 401 / unauthorized

    ICal Authentication : 401 / unauthorized

    Hi there!

    I've setup an beta prod env. with user authentication activated in config.yaml. My oncall app is behind a reverse proxy, everything seems working fined (even with my mods).

    I'm trying to reach ical from thunderbird app after having generated ical key in user conf. TB ask me for user credential, but I always land on a 401 error : 192.168.1.7 - - [25/Apr/2022:21:53:59 +0200] "GET /api/v0/ical/e11ed94a-ac2b-4bd9-b22f-fa52bfdbab56 HTTP/1.1" 401 63 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0"

    Of course, with authentication turned off, everything is reachable.

    I'm learning python with that project, and I do not know where to start to debug it.

    It do not even reach public_ical.py, and i do not know where falcon intercept the request.

    Any help would be greatly appreciated!

    opened by Bbillyben 2
Releases(v1.5.1)
CI repo for building Skia as a shared library

Automated Skia builds This repo is dedicated to building Skia binaries for use in Skija. Prebuilt binaries Prebuilt binaries can be found in releases.

Humble UI 20 Jan 06, 2023
Hw-ci - Hardware CD/CI and Development Container

Hardware CI & Dev Containter These containers were created for my personal hardware development projects and courses duing my undergraduate degree. Pl

Matthew Dwyer 6 Dec 25, 2022
DataOps framework for Machine Learning projects.

Noronha DataOps Noronha is a Python framework designed to help you orchestrate and manage ML projects life-cycle. It hosts Machine Learning models ins

52 Oct 30, 2022
Azure plugins for Feast (FEAture STore)

Feast on Azure This project provides resources to enable running a feast feature store on Azure. Feast Azure Provider The Feast Azure provider acts li

Microsoft Azure 70 Dec 31, 2022
Let's Git - Version Control & Open Source Homework

Let's Git - Version Control & Open Source Homework Welcome to this homework for our MOOC: Let's Git! We hope you will learn a lot and have fun working

1 Dec 05, 2021
Chef-like functionality for Fabric

/ / ___ ___ ___ ___ | | )| |___ | | )|___) |__ |__/ | __/ | | / |__ -- Chef-like functionality for Fabric About Fabric i

Sébastien Pierre 1.3k Dec 21, 2022
sysctl/sysfs settings on a fly for Kubernetes Cluster. No restarts are required for clusters and nodes.

SysBindings Daemon Little toolkit for control the sysctl/sysfs bindings on Kubernetes Cluster on the fly and without unnecessary restarts of cluster o

Wallarm 19 May 06, 2022
Kube kombu - Running kombu consumers with support of liveness probe for kubernetes

Setup and Running Kombu consumers Steps: Install python 3.9 or greater on your s

Anmol Porwal 5 Dec 10, 2022
Knock your images before these make you painful.

image-knocker Knock your images before these make you painful. Background One day, I had run my deep learning model training program and got off work

Yonghye Kwon 9 Jul 25, 2022
A honey token manager and alert system for AWS.

SpaceSiren SpaceSiren is a honey token manager and alert system for AWS. With this fully serverless application, you can create and manage honey token

287 Nov 09, 2022
DAMPP (gui) is a Python based program to run simple webservers using MySQL, Php, Apache and PhpMyAdmin inside of Docker containers.

DAMPP (gui) is a Python based program to run simple webservers using MySQL, Php, Apache and PhpMyAdmin inside of Docker containers.

Sehan Weerasekara 1 Feb 19, 2022
Find-Xss - Termux Kurulum Dosyası Eklendi Eğer Hata Alıyorsanız Lütfen Resmini Çekip İnstagramdan Bildiriniz

FindXss Waf Bypass Eklendi !!! PRODUCER: Saep UPDATER: Aser-Vant Download: git c

Aser 2 Apr 17, 2022
A repository containing a short tutorial for Docker (with Python).

Docker Tutorial for IFT 6758 Lab In this repository, we examine the advtanges of virtualization, what Docker is and how we can deploy simple programs

Arka Mukherjee 0 Dec 14, 2021
A lobby boy will create a VPS server when you need one, and destroy it after using it.

Lobbyboy What is a lobby boy? A lobby boy is completely invisible, yet always in sight. A lobby boy remembers what people hate. A lobby boy anticipate

226 Dec 29, 2022
Travis CI testing a Dockerfile based on Palantir's remix of Apache Cassandra, testing IaC, and testing integration health of Debian

Testing Palantir's remix of Apache Cassandra with Snyk & Travis CI This repository is to show Travis CI testing a Dockerfile based on Palantir's remix

Montana Mendy 1 Dec 20, 2021
Deploy a simple Multi-Node Clickhouse Cluster with docker-compose in minutes.

Simple Multi Node Clickhouse Cluster I hate those single-node clickhouse clusters and manually installation, I mean, why should we: Running multiple c

Nova Kwok 11 Nov 18, 2022
Build Netbox as a Docker container

netbox-docker The Github repository houses the components needed to build Netbox as a Docker container. Images are built using this code and are relea

Farshad Nick 1 Dec 18, 2021
MagTape is a Policy-as-Code tool for Kubernetes that allows for evaluating Kubernetes resources against a set of defined policies to inform and enforce best practice configurations.

MagTape is a Policy-as-Code tool for Kubernetes that allows for evaluating Kubernetes resources against a set of defined policies to inform and enforce best practice configurations. MagTape includes

T-Mobile 143 Dec 27, 2022
More than 130 check plugins for Icinga and other Nagios-compatible monitoring applications. Each plugin is a standalone command line tool (written in Python) that provides a specific type of check.

Python-based Monitoring Check Plugins Collection This Enterprise Class Check Plugin Collection offers a package of more than 130 Python-based, Nagios-

Linuxfabrik 119 Dec 27, 2022
Ralph is the CMDB / Asset Management system for data center and back office hardware.

Ralph Ralph is full-featured Asset Management, DCIM and CMDB system for data centers and back offices. Features: keep track of assets purchases and th

Allegro Tech 1.9k Jan 01, 2023