linkedin / iris Goto Github PK
View Code? Open in Web Editor NEWIris is a highly configurable and flexible service for paging and messaging.
Home Page: http://iris.claims
License: BSD 2-Clause "Simplified" License
Iris is a highly configurable and flexible service for paging and messaging.
Home Page: http://iris.claims
License: BSD 2-Clause "Simplified" License
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:
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
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.
The number of unread email is growing indefinitely in our inbox. We should just ignore the parsing and mark as read for emails with the following headers:
X-Autoreply: yes
Auto-Submitted: auto-replied
The above should be good enough for gmail users.
If we want to go fancy, there is more stuff we can check: https://github.com/jpmckinney/multi_mail/wiki/Detecting-autoresponders
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:
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!
Since it's not in use anymore.
i'am using irisclient python to create incident but there is no message created ( notification)
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.
Make it so iris admins can click a button to make iris change the key for an app to a new randomized value.
It seems that there is no API documentation, UI or sample query that makes apparent how an application is created.
Any help would be appreciated.
If a plan has a slash in its name, e.g. "test-name-with-/-character", it cannot be deleted. The DELETE http request fails, generating a 404:
Request URL: https://iris.dev.bol.io/v0/plans/test-name-with-/-character
Request method: DELETE
Status code: 404 Not Found
Hi !
Iris allow lots of actions in its plans steps, like :
It could be useful to have a 'WebCall' action which perform a simple HTTP call.
Why ?
Why i get this log :
2018-06-25 16:19:35,066 INFO iris.vendors.iris_dummy SEND:
Iris is using iris_dummy instead of iris_smtp so it's not sending email ?
We got a 414 (Request-URI too long) from slack since the params are URL encoded instead of form encoded. It doesn't make sense to URL encode it if it's doing a POST anyway.
Call to slack
https://github.com/linkedin/iris/blob/master/src/iris/vendors/iris_slack.py#L90
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
The current behavior is a little bit confusing because it returns 200 to the client, the message won't be delivered later in the code path if role:target
is invalid.
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)
.
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?
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?
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.
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").
Hi,
I'd like to remove the incident ID from email message subject headers - where can I do this in the code?
Thanks!
edit: Happy 4th!
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?
Our webhook expects a message id to get application for response content. We should change that to just return the content when message id is None.
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
Is it possible to use postgresql instead of mysql ?
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.
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?
the default 30s is too long. we need to also document this behavior
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?
Hi, it would be great to have docker container to quickly spin-up for evaluation/testing.
Thanks
How to configure delay between incident and alerting ?
Make auth config settings more transparent by providing an example.
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.
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.
I'm trying to find out how to get iris integration with oncall is configured.
It seems that sync_targets.py is somehow involved. But I cannot find any references on how this is configured or run.
Any help would be appreciated.
When using the plan view, steps are always counted starting at 1.
However, when looking at an incident or an overview of incidents, what was step 1 is actually referred to as step 0 ("Current Step: 0").
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.
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:
Cloning:
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.
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.
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..
At our company, we have the following use case:
I've set this up in Iris with a plan that:
In Oncall:
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..
Hello,
When trying to visit https://iris.claims I get a certificate error indicating the certificate in use is for *.github.com.
so that users don't have to click into the detailed message view to check the twilio delivery status.
bonus point: have a per incident stats summary including success rate and some other interesting data.
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.
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'}]
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.