Code Monkey home page Code Monkey logo

iris's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iris's Issues

Getting "Application error" voice message

Hi ,

We are trying IRIS & Oncall in our office environment. Whenever I create a test incident (Using Plans) with urgent priority, I get a call from iris. But the voice message says "application error". I expect the voice call to read the incident. It is not working. I have opened the externalip:16649 to the world, Below is my twilio config in IRIS,

vendors:

  • type: iris_twilio
    name: twilio_1
    account_sid: XXXXXXXXXXXXXXXXXXXXXXXXX
    auth_token: XXXXXXXXXXXXXXXXXXXXXXXXX
    twilio_number: +XXXXXXXXXXXXXXXXXXXXXX
    relay_base_url: http://External-IP:16649/

I get the following error,

web.1 | 54.158.131.187 - - [24/Jan/2018:05:24:26 +0000] "POST /api/v0/twilio/calls/gather?content=188.+test_call&source=Autoalerts&instruction=Press+2+to+claim.&message_id=188&loop=3 HTTP/1.1" 404 - "-" "TwilioProxy/1.1"
web.1 | 54.82.193.204 - - [24/Jan/2018:05:24:28 +0000] "POST /api/v0/twilio/status HTTP/1.1" 404 - "-" "TwilioProxy/1.1"
web.1 | 54.165.215.242 - - [24/Jan/2018:05:24:30 +0000] "POST /api/v0/twilio/status HTTP/1.1" 404 - "-" "TwilioProxy/1.1"

Please help me fix it.

Thanks,
Gani

css paths missing

Tried an installation of Iris and got it running, but there is no CSS displayed in the browser. Static logo is working. Tried looking a bit in the source code and the CSS link path is empty when I do inspect source, so my guess is that there is something wrong in the templating where it sais ASSET_URL. Not sure how to fix it though.

Question: Is it possible to use iris without LDAP?

I am attempting to setup and try-out Iris for our company's oncall system, however we do not use LDAP for authentication. Is Iris usable without it? I did not see any documentation on authentication in the README.

Messagebird support

We'll be using Messagebird instead of Twilio.
No advantage per se, just something our company already has in use.

Edit: removed metrics question which wasn't relevant due to me confusing the way vendors deal with metrics - nothing to see here..

DOCKER

Hi, it would be great to have docker container to quickly spin-up for evaluation/testing.

Thanks

Allow all contact modes to be used for "Incident Tracking"

It would be nice if any kind of contact mode could be used for incident tracking. Especially the ability to provide an arbitrary value is very nice.

Say for example you want to send all alerts to a chat room, but don't want to create user's that represent any random chat room your teams want to use. Incident tracking allows the user to select the channel (e.g. "chat") and type in the teams chat room they want to use for alerts (e.g. "Team 1a Alerts").

Arrow keys move pages even when on input field

If your are in an input field and use the arrow keys to move back and forth in the text for the input field, the pagination for the page also changes. The arrow keys for pagination should probably be disabled when focus is on an input field.

Plans for mobile

I’ve been looking at your work on Iris in the mobile branch of the iris and iris-relay repo and I’ve been wondering what is planned for the future?

If I understand correctly currently iris-relay can do SAML but in its mobile branch it would use the qrcode/mobile_key for authorization instead that is generated in iris's mobile branch?

Seems that there's also work to register devices for push notifications, is there work being done on a mobile client?

Track Email Conversation Threads with owasync.py

Hello,

When creating incidents via email messages, it would seem advantageous to only create an incident once per a conversation thread. Users will add the "On call" email address to a thread that requires emergency attention, which triggers the incident, but every successive message in that thread will continue to create new Iris incidents each time there is a reply.

I notice that there is a check in ResponseEmail.on_post for the 'In-Reply-To' header, but at least in my organization's Exchange implementation I don't see that header existing. However, Outlook/Exchange does have a well-documented 'Thread-Index' header that tracks the uniqueness of a conversation thread:

https://msdn.microsoft.com/en-us/library/ee202481(v=exchg.80)?ranMID=24542&ranEAID=TnL5HPStwNw&ranSiteID=TnL5HPStwNw-go3ivEugoQ2BnSvLr55H8A&tduid=(753a0626561d1d154f69a0a528d10da2)(256380)(2459594)(TnL5HPStwNw-go3ivEugoQ2BnSvLr55H8A)()

Using the Thread-Index, I have some code that will store the unique Thread-Index ID in the incident context. When an incoming email message arrives that would normally create an incident, ResponseEmail.on_post will first check incidents created in the past X number of hours (configurable), and if the context already contains the same Thread-Index ID, skip creation of a new incident and log a warning.

Let me know what you think about the feature and I can send a PR if you like it. Thanks!

iris_twilio Module Fails on urllib.urlencode() with Unicode Characters

I experienced an issue yesterday where a well-meaning user pasted in some output he received in PuTTY to the creation of an Iris incident. Within this output, I believe there were some unusual unicode quote characters that caused urllib.urlencode to fail to encode the payload inside the iris_twilio vendor module. The end result was that Twilio didn't trigger any phone calls or SMS messages and fell back to email because of all the unhandled exceptions.

Nov 15 19:17:20 iris-host iris[33482]: sender.1 | 2017-11-15 19:17:20,094 INFO root Sending message (ID 38) locally
Nov 15 19:17:20 iris-host iris[33482]: sender.1 | 2017-11-15 19:17:20,094 ERROR iris.vendors Sending {u'body': u'Blah blah blah some text about /etc/nginx/sites-available$ sudo ln -s /etc/nginx/sites-available/default_new /etc/nginx/sites-enabled/default\r\nln: failed to create symbolic link \xe2/etc/nginx/sites-enabled/default\xe2: File exists
Nov 15 19:17:20 iris-host iris[33482]: '} with vendor <iris.vendors.iris_twilio.iris_twilio object at 0x7f9b3faffcd0> failed
Nov 15 19:17:20 iris-host iris[33482]: sender.1 | Traceback (most recent call last):
Nov 15 19:17:20 iris-host iris[33482]: sender.1 |   File "/alldata/home/iris/iris/src/iris/vendors/__init__.py", line 64, in send_message
Nov 15 19:17:20 iris-host iris[33482]: sender.1 |     return vendor.send(message)
Nov 15 19:17:20 iris-host iris[33482]: sender.1 |   File "/alldata/home/iris/iris/src/iris/vendors/iris_twilio.py", line 143, in send
Nov 15 19:17:20 iris-host iris[33482]: sender.1 |     return self.modes[message['mode']](message)
Nov 15 19:17:20 iris-host iris[33482]: sender.1 |   File "/alldata/home/iris/iris/src/iris/vendors/iris_twilio.py", line 112, in send_call
Nov 15 19:17:20 iris-host iris[33482]: sender.1 |     self.config['relay_base_url'], urllib.urlencode(payload)
Nov 15 19:17:20 iris-host iris[33482]: sender.1 |   File "/usr/lib/python2.7/urllib.py", line 1343, in urlencode
Nov 15 19:17:20 iris-host iris[33482]: sender.1 |     v = quote_plus(str(v))
Nov 15 19:17:20 iris-host iris[33482]: sender.1 | UnicodeEncodeError: 'ascii' codec can't encode character u'\xe2' in position 350: ordinal not in range(128)

I believe this should be a straightforward fix of UTF-8 encoding the payload before urlencoding it. PR incoming, but let me know if you have something else in mind.

CircleCI fails on master branch(commit f104b1c) in step 'make flake8'

Hi,

CircleCI failed on my PR (#345) , so I rebuilded on master branch (commit f104b1c) on my CircleCI I got the same error:

make flake8
make[1]: Entering directory `/home/ubuntu/iris'
flake8 src test setup.py
src/iris/api.py:904:21: E741 ambiguous variable name 'l'
src/iris/api.py:1853:9: E722 do not use bare except'
src/iris/api.py:1861:21: E722 do not use bare except'
src/iris/api.py:3649:9: E722 do not use bare except'
src/iris/api.py:3656:9: E722 do not use bare except'
src/iris/api.py:3741:9: E722 do not use bare except'
src/iris/sphinx_extension.py:35:17: E722 do not use bare except'
src/iris/bin/sender.py:511:13: E741 ambiguous variable name 'l'
src/iris/bin/sender.py:519:16: E741 ambiguous variable name 'l'
src/iris/bin/sync_targets.py:394:9: E741 ambiguous variable name 'l'
src/iris/role_lookup/__init__.py:22:9: E722 do not use bare except'
src/iris/sender/cache.py:450:9: E722 do not use bare except'
src/iris/vendors/iris_smtp.py:148:13: E722 do not use bare except'
src/iris/vendors/iris_smtp.py:183:13: E722 do not use bare except'
make: *** [flake8] Error 1

I reproduce this error locally with:

flake8 --version
3.5.0 (mccabe: 0.6.1, pycodestyle: 2.3.1, pyflakes: 1.6.0) CPython 2.7.11 on Linux

I don't understand why circleci passed on https://circleci.com/gh/linkedin/iris/386#

Could you trigger a rebuild to confirm that please?

Create/Clone Plan error

Hey guys,

Running into an issue when attempting to create a new plan or cloning an existing.

Browser users:
FireFox - ver 54.0 (64-bit)
Safari - ver 10.1.1 (11603.2.5)

Steps to reproduce:

  1. Log into Iris as user 'demo'.
  2. Select the "Plans" tab, then 'Create New Plan'
  3. Complete the resulting form and attempt to save.

Cloning:

  1. Log into Iris as user 'demo'.
  2. Select an existing plan
  3. Select 'Clone Plan'
  4. Provide a new name, and attempted to save

Error:
Error: Invalid plan - Priority not found for step 1

Priorities as defined in MySQL:
mysql> select * from priority
-> ;
+----+--------+---------+
| id | name | mode_id |
+----+--------+---------+
| 8 | urgent | 26 |
| 17 | high | 8 |
| 26 | medium | 35 |
| 35 | low | 35 |
+----+--------+---------+
4 rows in set (0.00 sec)

My environment is the Docker provided container.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0403df004620 quay.io/iris/oncall "sudo -EHu oncall ..." 3 hours ago Up 3 hours 0.0.0.0:8080->8080/tcp cranky_bartik
e27f2187332f quay.io/iris/iris:latest "sudo -EHu iris ba..." 3 hours ago Up 3 hours 0.0.0.0:16649->16649/tcp loving_hawking
c74c80e64dcc mysql:1.3 "docker-entrypoint..." 3 hours ago Up 3 hours 0.0.0.0:3306->3306/tcp oncall-mysql

Thanks in advance for your help.

Bug: aggregated messages will lose their original message body

Currently, if a message is aggregated, the original body will get reset to a `Batch ID: HASH' due to the following line:

sql = SENT_MESSAGE_BATCH_SQL % connection.escape(message['aggregated_ids'])

Ideally, we should keep the content of the original messages unchanged and create a new message specifically for the batch notification.

How to add new vendor support e.g. Hipchat?

I've implemented Hipchat support (./src/iris/vendors/iris_hipchat.py), but actually integrating this into Iris and Oncall isn't obvious to me.

In Iris, I can add a new mode (through a DB edit) called "hipchat". This is reflected in all the expected places in the UI.

Making a similar change to Oncall, for example in the contact_mode table, does not propagate any changes to the UI. Can I safely assume this is work in progress or am I missing something?

Add documentation on Oncall/Iris integration for messaging

It is not clear to me from the documentation or config comments what config settings are required in order for Oncall to be able to pull from notification_queue and then trigger out a message to the recipient via Iris as the sender. I'm using the annotated config provided via a553c1e from #334, which seems to call out the default values related to SMTP, vendor, etc, and likewise I have an entry in the plugin section of Oncall's config defined for iris_messenger. Yet I'm unable to get email messages triggered out of either Iris (via Incident creation) or On-Call (via Reminders/Notifications). Notification_queue continues to hold a ton of rows all marked with NULL for column SENT. Long story short, additional documentation on using Iris as the messaging system would be appreciated.

Creating a Plan fails with sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1048, u"Column 'user_id' cannot be null")

When creating the docker containers with:

cd ops/packer
packer build -only=docker ./output/iris.json

Running them with the configs/config.dev.yaml against a DB that imported schema_0.sql and dummy_data.sql and then trying to create a Plan:

[2017-11-09 14:38:46 +0000] [14] [ERROR] iris.db SERVER ERROR
Traceback (most recent call last):
  File "./iris/db.py", line 37, in guarded_session
    yield session
  File "./iris/api.py", line 1182, in on_post
    plan_id = session.execute(insert_plan_query, plan_dict).lastrowid
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1046, in execute
    bind, close_with_result=True).execute(clause, params or {})
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 914, in execute
    return meth(self, multiparams, params)
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement
    compiled_sql, distilled_params
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
    context)
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1341, in _handle_dbapi_exception
    exc_info
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 200, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb)
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
    context)
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 450, in do_execute
    cursor.execute(statement, parameters)
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/cursors.py", line 158, in execute
    result = self._query(query)
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/cursors.py", line 308, in _query
    conn.query(q)
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 820, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 1002, in _read_query_result
    result.read()
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 1285, in read
    first_packet = self.connection._read_packet()
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 966, in _read_packet
    packet.check_error()
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 394, in check_error
    err.raise_mysql_exception(self._data)
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/err.py", line 120, in raise_mysql_exception
    _check_mysql_exception(errinfo)
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/err.py", line 112, in _check_mysql_exception
    raise errorclass(errno, errorvalue)
IntegrityError: (pymysql.err.IntegrityError) (1048, u"Column 'user_id' cannot be null") [SQL: u"INSERT INTO `plan` (\n    `user_id`, `name`, `created`, `description`, `step_count`,\n    `threshold_window`, `threshold_count`, `aggregation_window`,\n    `aggregation_reset`, `tracking_key`, `tracking_type`, `tracking_template`\n) VALUES (\n    (SELECT `id` FROM `target` where `name` = %(creator)s AND `type_id` = (\n      SELECT `id` FROM `target_type` WHERE `name` = 'user'\n    )),\n    %(name)s,\n    %(created)s,\n    %(description)s,\n    %(step_count)s,\n    %(threshold_window)s,\n    %(threshold_count)s,\n    %(aggregation_window)s,\n    %(aggregation_reset)s,\n    %(tracking_key)s,\n    %(tracking_type)s,\n    %(tracking_template)s\n)"] [parameters: {u'step_count': 1, u'name': u'tes', u'threshold_count': 10, u'creator': u'root', u'created': datetime.datetime(2017, 11, 9, 14, 38, 46, 445930), u'aggregation_window': 300, u'tracking_type': None, u'aggregation_reset': 300, u'tracking_template': None, u'tracking_key': None, u'threshold_window': 900, u'description': u'tes'}]
Traceback (most recent call last):
  File "/home/iris/env/local/lib/python2.7/site-packages/beaker/middleware.py", line 155, in __call__
    return self.wrap_app(environ, session_start_response)
  File "/home/iris/env/local/lib/python2.7/site-packages/falcon/api.py", line 209, in __call__
    responder(req, resp, **params)
  File "./iris/api.py", line 1182, in on_post
    plan_id = session.execute(insert_plan_query, plan_dict).lastrowid
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1046, in execute
    bind, close_with_result=True).execute(clause, params or {})
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 914, in execute
    return meth(self, multiparams, params)
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement
    compiled_sql, distilled_params
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
    context)
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1341, in _handle_dbapi_exception
    exc_info
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 200, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb)
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
    context)
  File "/home/iris/env/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 450, in do_execute
    cursor.execute(statement, parameters)
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/cursors.py", line 158, in execute
    result = self._query(query)
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/cursors.py", line 308, in _query
    conn.query(q)
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 820, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 1002, in _read_query_result
    result.read()
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 1285, in read
    first_packet = self.connection._read_packet()
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 966, in _read_packet
    packet.check_error()
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/connections.py", line 394, in check_error
    err.raise_mysql_exception(self._data)
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/err.py", line 120, in raise_mysql_exception
    _check_mysql_exception(errinfo)
  File "/home/iris/env/local/lib/python2.7/site-packages/pymysql/err.py", line 112, in _check_mysql_exception
    raise errorclass(errno, errorvalue)
sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1048, u"Column 'user_id' cannot be null") [SQL: u"INSERT INTO `plan` (\n    `user_id`, `name`, `created`, `description`, `step_count`,\n    `threshold_window`, `threshold_count`, `aggregation_window`,\n    `aggregation_reset`, `tracking_key`, `tracking_type`, `tracking_template`\n) VALUES (\n    (SELECT `id` FROM `target` where `name` = %(creator)s AND `type_id` = (\n      SELECT `id` FROM `target_type` WHERE `name` = 'user'\n    )),\n    %(name)s,\n    %(created)s,\n    %(description)s,\n    %(step_count)s,\n    %(threshold_window)s,\n    %(threshold_count)s,\n    %(aggregation_window)s,\n    %(aggregation_reset)s,\n    %(tracking_key)s,\n    %(tracking_type)s,\n    %(tracking_template)s\n)"] [parameters: {u'step_count': 1, u'name': u'tes', u'threshold_count': 10, u'creator': u'root', u'created': datetime.datetime(2017, 11, 9, 14, 38, 46, 445930), u'aggregation_window': 300, u'tracking_type': None, u'aggregation_reset': 300, u'tracking_template': None, u'tracking_key': None, u'threshold_window': 900, u'description': u'tes'}]

gwatch_renewer> failed with KeyError

2018-01-23 08:58:58,519 INFO root [-] start escalate task...
Traceback (most recent call last):
  File "/home/wleese/git/docker-iris/iris/virt_env/virt1/local/lib/python2.7/site-packages/gevent/greenlet.py", line 534, in run
    result = self._run(*self.args, **self.kwargs)
  File "/home/wleese/git/docker-iris/iris/src/iris/bin/sender.py", line 1317, in gwatch_renewer
    gmail_config = config['gmail']
KeyError: 'gmail'
<Greenlet at 0x7f6127a92af0: gwatch_renewer> failed with KeyError

Despite the skipgmailwatch config setting. I couldn't find any other way to disable gwatch

Add UI for team subscription

As mentioned in #330

We actually have a feature in-flight for this kind of use-case in Oncall. We call it "team subscription", which lets a team in Oncall borrow another team's events and put them onto its calendar. This lets you have TeamA "subscribe" to TeamB's primary events, and have them appear on TeamA's calendar. Then, when you query Oncall for TeamA's current primary, TeamB's primary will appear.

The main thing missing there is UI support; there's not yet a way to add them in the frontend. I think the calendar display for subscribed events is a little rough around the edges as well, but I haven't been able to get the time to throw that together. I think I'll check in with our web dev and our designer at LinkedIn and see what they're thinking about it.

After careful consideration, we'd not only like to use this feature, but also want to expose it to our users.

Feat: webcall actions

Hi !

Iris allow lots of actions in its plans steps, like :

  • User
  • Manager
  • Team
  • Oncall-Primary
  • Oncall-Secondary

It could be useful to have a 'WebCall' action which perform a simple HTTP call.

Why ?

  • Some microservices can perfom actions on incident
  • Make aggregations of incidents to build globals services status pages
  • We can build and update services dependencies trees
  • finaly, we can integrate Iris with others services like statuscake, datadog, etc...

target_contact entry for targets of type team

Hi,

I've finally gotten Iris and Oncall integrated but I have a question.

It would seem the default behavior when a target is team is to individually email all members of a given team, rather than looking in the target_contact table to see if a defined team in the database has a mode assigned to it. For instance, I can see in my target table that I have a team with a type_id of 2, which of course means team, but the way the tables are structured it would seem as though I can assign a mode to any target in target_contact.

I think it would make sense for the app to look at this first before determining which members are in a given team and emailing them individually (it would certainly make organizations' SMTP servers happier for large teams of people). This would also be nice for teams that have a rotating oncall phone number that everyone forwards their phones to when their shift starts. The default behavior of course being individual messages, unless a team has any modes assigned to it in target_contact.

Is this possible?

Enable support for both Python 2.x and 3.x

As subsequent changes are no longer forthcoming to the 2.x branch of Python projects should begin the process of cross compatibility. This issue is being opened to collect outstanding issues and note blockers, should other users attempt to run Iris with Python 3.x.

Custom Vendor for Sending Message and Notification

Hi, I would like to know if it's possible to add a custom vendor for sending message and notification. So far, Iris provides sending them via email, slack, and twillio. But what if I want to send the message and notification by firing a personalized API? If it's possible, where do I start and what do I have to add? Thanks in advance.

circleci tests are currently broken


libldap2-dev is already the newest version.
libldap2-dev set to manually installed.
libssl-dev is already the newest version.
The following package was automatically installed and is no longer required:
  os-prober
Use 'apt-get autoremove' to remove it.
The following extra packages will be installed:
  libpython-dev libpython2.7 libpython2.7-dev libpython2.7-minimal
  libpython2.7-stdlib python2.7 python2.7-dev python2.7-minimal
Suggested packages:
  python2.7-doc
The following NEW packages will be installed:
  libpython-dev libpython2.7-dev libsasl2-dev python-dev python2.7-dev
The following packages will be upgraded:
  libpython2.7 libpython2.7-minimal libpython2.7-stdlib python2.7
  python2.7-minimal
5 upgraded, 5 newly installed, 0 to remove and 113 not upgraded.
Need to get 27.2 MB of archives.
After this operation, 35.0 MB of additional disk space will be used.


Err http://archive.ubuntu.com/ubuntu/ trusty-updates/main python2.7 amd64 2.7.6-8ubuntu0.3
  404  Not Found [IP: 91.189.88.161 80]

Err http://security.ubuntu.com/ubuntu/ trusty-security/main python2.7 amd64 2.7.6-8ubuntu0.3
  404  Not Found [IP: 91.189.88.152 80]

Err http://security.ubuntu.com/ubuntu/ trusty-security/main libpython2.7 amd64 2.7.6-8ubuntu0.3
  404  Not Found [IP: 91.189.88.152 80]

Err http://security.ubuntu.com/ubuntu/ trusty-security/main libpython2.7-stdlib amd64 2.7.6-8ubuntu0.3
  404  Not Found [IP: 91.189.88.152 80]

Err http://security.ubuntu.com/ubuntu/ trusty-security/main python2.7-minimal amd64 2.7.6-8ubuntu0.3
  404  Not Found [IP: 91.189.88.152 80]

Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main libpython-dev amd64 2.7.5-5ubuntu3 [7,078 B]

Err http://security.ubuntu.com/ubuntu/ trusty-security/main libpython2.7-minimal amd64 2.7.6-8ubuntu0.3
  404  Not Found [IP: 91.189.88.152 80]

Get:2 http://archive.ubuntu.com/ubuntu/ trusty/main libsasl2-dev amd64 2.1.25.dfsg1-17build1 [311 kB]

Err http://security.ubuntu.com/ubuntu/ trusty-security/main libpython2.7-dev amd64 2.7.6-8ubuntu0.3
  404  Not Found [IP: 91.189.88.152 80]

Err http://archive.ubuntu.com/ubuntu/ trusty-updates/main python2.7-dev amd64 2.7.6-8ubuntu0.3
  404  Not Found [IP: 91.189.88.161 80]

Get:3 http://archive.ubuntu.com/ubuntu/ trusty/main python-dev amd64 2.7.5-5ubuntu3 [1,166 B]

Err http://security.ubuntu.com/ubuntu/ trusty-security/main python2.7-dev amd64 2.7.6-8ubuntu0.3
  404  Not Found [IP: 91.189.88.152 80]

Fetched 320 kB in 1s (264 kB/s)
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/p/python2.7/python2.7_2.7.6-8ubuntu0.3_amd64.deb  404  Not Found [IP: 91.189.88.152 80]

E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/p/python2.7/libpython2.7_2.7.6-8ubuntu0.3_amd64.deb  404  Not Found [IP: 91.189.88.152 80]

E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/p/python2.7/libpython2.7-stdlib_2.7.6-8ubuntu0.3_amd64.deb  404  Not Found [IP: 91.189.88.152 80]

E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/p/python2.7/python2.7-minimal_2.7.6-8ubuntu0.3_amd64.deb  404  Not Found [IP: 91.189.88.152 80]

E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/p/python2.7/libpython2.7-minimal_2.7.6-8ubuntu0.3_amd64.deb  404  Not Found [IP: 91.189.88.152 80]

E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/p/python2.7/libpython2.7-dev_2.7.6-8ubuntu0.3_amd64.deb  404  Not Found [IP: 91.189.88.152 80]

E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/p/python2.7/python2.7-dev_2.7.6-8ubuntu0.3_amd64.deb  404  Not Found [IP: 91.189.88.152 80]

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

bash .ci/install.sh returned exit code 100

Action failed: bash .ci/install.sh

refactor metrics module

We should keep state in metrics module instead of caller module. the only thing a caller needs to do should be calling metrics.set(METRIC_NAME, VALU) or metrics.incr(METRIC_NAME).

Support oncall schedules that are not 24/7

At our company, we have the following use case:

  • Alert is created
  • If office hours, TeamA is notified
  • If outside office hours, TeamB is notified

I've set this up in Iris with a plan that:

  • In step 1 has 2 Notifications
  • The first points to TeamA in oncall as primary
  • The second points to TeamB in oncall as primary

In Oncall:

  • TeamA has someone oncall during office hours
  • TeamB has someone oncall outside of office hours.

This works, but results in notifications going to the plan creator:

You are receiving this as you created this plan and we can't resolve oncall-primary of TeamA at this time.

Now I could suppress this message by making some code changes, but before I take that route (and potentially lose visibility into actual issues resolving oncall-primaries), I'd like to know if there is better way to achieve what I want.

Edit: alternatively, I could add a dummy user with the drop mode and use that to fill in the gaps in the calendar for both teams..

API key

Hi, I'm trying to trigger an incident using the API. But I can't figure out how to get the API key. Is it created automatically with the creation of an application or how does it work? Was also unable to create a new application from UI. Is this something that has to be done via the config file?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.