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)
Ingress patch example by Kustomize

Ingress patch example by Kustomize

Jinu 10 Nov 14, 2022
Run your clouds in RAID.

UniKlaud Run your clouds in RAID Table of Contents About The Project Built With Getting Started Installation Usage Roadmap Contributing License Contac

3 Jan 16, 2022
Chartreuse: Automated Alembic migrations within kubernetes

Chartreuse: Automated Alembic SQL schema migrations within kubernetes "How to automate management of Alembic database schema migration at scale using

Wiremind 8 Oct 25, 2022
Automatically capture your Ookla Speedtest metrics and display them in a Grafana dashboard

Speedtest All-In-One Automatically capture your Ookla Speedtest metrics and display them in a Grafana dashboard. Getting Started About This Code This

Aaron Melton 2 Feb 22, 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
Google Kubernetes Engine (GKE) with a Snyk Kubernetes controller installed/configured for Snyk App

Google Kubernetes Engine (GKE) with a Snyk Kubernetes controller installed/configured for Snyk App This example provisions a Google Kubernetes Engine

Pas Apicella 2 Feb 09, 2022
A Habitica Integration with Github Workflows.

Habitica-Workflow A Habitica Integration with Github Workflows. How To Use? Fork (and Star) this repository. Set environment variable in Settings - S

Priate 2 Dec 20, 2021
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
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
Inferoxy is a service for quick deploying and using dockerized Computer Vision models.

Inferoxy is a service for quick deploying and using dockerized Computer Vision models. It's a core of EORA's Computer Vision platform Vision Hub that runs on top of AWS EKS.

94 Oct 10, 2022
Checkmk kube agent - Checkmk Kubernetes Cluster and Node Collectors

Checkmk Kubernetes Cluster and Node Collectors Checkmk cluster and node collecto

tribe29 GmbH 15 Dec 26, 2022
This repository contains code examples and documentation for learning how applications can be developed with Kubernetes

BigBitBus KAT Components Click on the diagram to enlarge, or follow this link for detailed documentation Introduction Welcome to the BigBitBus Kuberne

51 Oct 16, 2022
This repository contains useful docker-swarm-tools.

docker-swarm-tools This repository contains useful docker-swarm-tools. swarm-guardian This Docker image is intended to be used in a multihost docker e

NeuroForge GmbH & Co. KG 4 Jan 12, 2022
Rundeck / Grafana / Prometheus / Rundeck Exporter integration demo

Rundeck / Prometheus / Grafana integration demo via Rundeck Exporter This is a demo environment that shows how to monitor a Rundeck instance using Run

Reiner 4 Oct 14, 2022
Honcho: a python clone of Foreman. For managing Procfile-based applications.

___ ___ ___ ___ ___ ___ /\__\ /\ \ /\__\ /\ \ /\__\ /\

Nick Stenning 1.5k Jan 03, 2023
🎡 Build Python wheels for all the platforms on CI with minimal configuration.

cibuildwheel Documentation Python wheels are great. Building them across Mac, Linux, Windows, on multiple versions of Python, is not. cibuildwheel is

Python Packaging Authority 1.3k Jan 02, 2023
Autoscaling volumes for Kubernetes (with the help of Prometheus)

Kubernetes Volume Autoscaler (with Prometheus) This repository contains a service that automatically increases the size of a Persistent Volume Claim i

DevOps Nirvana 142 Dec 28, 2022
gunicorn 'Green Unicorn' is a WSGI HTTP Server for UNIX, fast clients and sleepy applications.

Gunicorn Gunicorn 'Green Unicorn' is a Python WSGI HTTP Server for UNIX. It's a pre-fork worker model ported from Ruby's Unicorn project. The Gunicorn

Benoit Chesneau 8.7k Jan 08, 2023
Project 4 Cloud DevOps Nanodegree

Project Overview In this project, you will apply the skills you have acquired in this course to operationalize a Machine Learning Microservice API. Yo

1 Nov 21, 2021
RMRK spy bot for RMRK hackathon

rmrk_spy_bot RMRK spy bot https://t.me/RMRKspyBot for rmrk hacktoberfest https://rmrk.devpost.com/ Birds and items price and rarity estimation Reports

Victor Ryabinin 2 Sep 06, 2022