Joydeep
03/21/2024, 4:27 AMedr monitor with a slack webhook, I am getting the error notification for the model failure in slack but then edr monitor throws an error (as below). Looks like it is failing to update the sent alert in the database table alerts_v2 which stays in pending status. If I run edr monitor again, it again sends the alert to slack but is not able to mark the alert in the table as sent which is a bit annoying as it repeatedly sends pending alerts. Please advise. Output in threadJoydeep
03/21/2024, 4:29 AM$ edr monitor -c elementary
________ __
/ ____/ /__ ____ ___ ___ ____ / /_____ ________ __
/ __/ / / _ \/ __ `__ \/ _ \/ __ \/ __/ __ `/ ___/ / / /
/ /___/ / __/ / / / / / __/ / / / /_/ /_/ / / / /_/ /
/_____/_/\___/_/ /_/ /_/\___/_/ /_/\__/\__,_/_/ \__, /
/____/
Any feedback and suggestions are welcomed! join our community here - <https://bit.ly/slack-elementary>
2024-03-21 15:20:26 — INFO — Running with edr=0.14.1
2024-03-21 15:20:50 — INFO — edr (0.14.1) and Elementary's dbt package (0.14.1) are compatible.
2024-03-21 15:21:03 — INFO — Elementary's database and schema: '"dev.dwh_elementary"'
2024-03-21 15:21:03 — INFO — Running internal dbt run to populate alerts
2024-03-21 15:21:03 — INFO — Running dbt run -m elementary_cli.alerts.alerts_v2 --project-dir C:\ProgramData\Anaconda3\Lib\site-packages\elementary\monitor\dbt_project
04:21:07 Running with dbt=1.6.10
04:21:07 target not specified in profile 'elementary', using 'default'
04:21:08 Registered adapter: redshift=1.6.7
04:21:14 Found 41 models, 2 operations, 6 tests, 6 sources, 0 exposures, 0 metrics, 1323 macros, 0 groups, 0 semantic models
04:21:14
04:21:17
04:21:17 Running 1 on-run-start hook
04:21:17 1 of 1 START hook: elementary.on-run-start.0 ................................... [RUN]
04:21:17 1 of 1 OK hook: elementary.on-run-start.0 ...................................... [OK in 0.00s]
04:21:17
04:21:17 Concurrency: 4 threads (target='default')
04:21:17
04:21:17 1 of 1 START sql incremental model dwh_elementary.alerts_v2 .................... [RUN]
04:21:21 1 of 1 OK created sql incremental model dwh_elementary.alerts_v2 ............... [SUCCESS in 3.92s]
04:21:22
04:21:22 Running 1 on-run-end hook
04:21:22 1 of 1 START hook: elementary.on-run-end.0 ..................................... [RUN]
04:21:22 1 of 1 OK hook: elementary.on-run-end.0 ........................................ [OK in 0.00s]
04:21:22
04:21:22
04:21:22 Finished running 1 incremental model, 2 hooks in 0 hours 0 minutes and 7.22 seconds (7.22s).
04:21:22
04:21:22 Completed successfully
04:21:22
04:21:22 Done. PASS=1 WARN=0 ERROR=0 SKIP=0 TOTAL=1
2024-03-21 15:21:22 — INFO — Running dbt --log-format json run-operation elementary.log_macro_results --args {"macro_name": "elementary_cli.get_pending_alerts", "macro_args": {"days_back": 1, "type": null}} --project-dir C:\ProgramData\Anaconda3\Lib\site-packages\elementary\monitor\dbt_project
2024-03-21 15:21:34 — INFO — Running dbt --log-format json run-operation elementary.log_macro_results --args {"macro_name": "elementary_cli.get_last_alert_sent_times", "macro_args": {"days_back": 1, "type": null}} --project-dir C:\ProgramData\Anaconda3\Lib\site-packages\elementary\monitor\dbt_project
2024-03-21 15:21:46 — INFO — Update skipped alerts
Sending alerts |████████████████████████████████████████| 1/1 [100%] in 0.4s (2.25/s)
2024-03-21 15:21:47 — INFO — Update sent alerts
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\elementary\clients\dbt\dbt_runner.py", line 88, in _run_command
result = subprocess.run(
File "C:\ProgramData\Anaconda3\lib\subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['dbt', 'run', '-s', 'elementary_cli.update_alerts.update_sent_alerts', '--project-dir', 'C:\\ProgramData\\Anaconda3\\Lib\\site-packages\\elementary\\monitor\\dbt_project', '--vars', '{"alert_ids": ["a0bc9ba7-837f-40a9-abe0-9b89a13cab62.model.whitelabel.dim_user"], "sent_at": "2024-03-21 04:21:47"}']' returned non-zero exit status 1.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\ProgramData\Anaconda3\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
File "C:\ProgramData\Anaconda3\Scripts\edr.exe\__main__.py", line 7, in <module>
File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 1128, in __call__
return self.main(*args, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 1053, in main
rv = self.invoke(ctx)
File "C:\ProgramData\Anaconda3\lib\site-packages\elementary\cli\cli.py", line 67, in invoke
return super().invoke(ctx)
File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 1659, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 1637, in invoke
super().invoke(ctx)
File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 1395, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 754, in invoke
return __callback(*args, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\click\decorators.py", line 26, in new_func
return f(get_current_context(), *args, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\elementary\monitor\cli.py", line 364, in monitor
success = data_monitoring.run_alerts(
File "C:\ProgramData\Anaconda3\lib\site-packages\elementary\monitor\data_monitoring\alerts\data_monitoring_alerts.py", line 312, in run_alerts
self._send_alerts(formatted_alerts)
File "C:\ProgramData\Anaconda3\lib\site-packages\elementary\monitor\data_monitoring\alerts\data_monitoring_alerts.py", line 269, in _send_alerts
self._update_sent_alerts([alert.id for alert in sent_successfully_alerts])
File "C:\ProgramData\Anaconda3\lib\site-packages\elementary\monitor\data_monitoring\alerts\data_monitoring_alerts.py", line 275, in _update_sent_alerts
self.alerts_api.update_sent_alerts(alert_ids=alert_ids)
File "C:\ProgramData\Anaconda3\lib\site-packages\elementary\monitor\api\alerts\alerts.py", line 52, in update_sent_alerts
self.alerts_fetcher.update_sent_alerts(alert_ids=alert_ids)
File "C:\ProgramData\Anaconda3\lib\site-packages\elementary\monitor\fetchers\alerts\alerts.py", line 67, in update_sent_alerts
self.dbt_runner.run(
File "C:\ProgramData\Anaconda3\lib\site-packages\elementary\clients\dbt\dbt_runner.py", line 202, in run
success, _ = self._run_command(
File "C:\ProgramData\Anaconda3\lib\site-packages\elementary\clients\dbt\dbt_runner.py", line 99, in _run_command
raise DbtCommandError(err, command_args, logs=logs)
elementary.exceptions.exceptions.DbtCommandError: Failed to run dbt command.Joydeep
03/22/2024, 4:29 AMupdate_sent_alerts to False as below
def update_sent_alerts(self, alert_ids: List[str]) -> None:
alert_ids_chunks = self._split_list_to_chunks(alert_ids)
<http://logger.info|logger.info>("Update sent alerts")
for alert_ids_chunk in alert_ids_chunks:
self.dbt_runner.run(
select="elementary_cli.update_alerts.update_sent_alerts",
vars={
"alert_ids": alert_ids_chunk,
"sent_at": get_now_utc_str(),
},
quiet=False,
)
Now it shows a bit more detail which looks like argument parsing error re.error: bad character range as in the below output
2024-03-22 13:10:07 — INFO — Update skipped alerts
Sending alerts |████████████████████████████████████████| 1/1 [100%] in 0.6s (1.79/s)
2024-03-22 13:10:07 — INFO — Update sent alerts
2024-03-22 13:10:07 — INFO — Running dbt run -s elementary_cli.update_alerts.update_sent_alerts --project-dir C:\ProgramData\Anaconda3\Lib\site-packages\elementary\monitor\dbt_project --vars {"alert_ids": ["a0bc9ba7-837f-40a9-abe0-9b89a13cab62.model.whitelabel.dim_user"], "sent_at": "2024-03-22 02:10:07"}
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\ProgramData\Anaconda3\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
File "C:\ProgramData\Anaconda3\Scripts\dbt.exe\__main__.py", line 7, in <module>
File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 1128, in __call__
return self.main(*args, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\click\core.py", line 1040, in main
args = _expand_args(args)
File "C:\ProgramData\Anaconda3\lib\site-packages\click\utils.py", line 581, in _expand_args
matches = glob(arg, recursive=glob_recursive)
File "C:\ProgramData\Anaconda3\lib\glob.py", line 22, in glob
return list(iglob(pathname, recursive=recursive))
File "C:\ProgramData\Anaconda3\lib\glob.py", line 58, in _iglob
yield from _glob1(dirname, basename, dironly)
File "C:\ProgramData\Anaconda3\lib\glob.py", line 86, in _glob1
return fnmatch.filter(names, pattern)
File "C:\ProgramData\Anaconda3\lib\fnmatch.py", line 58, in filter
match = _compile_pattern(pat)
File "C:\ProgramData\Anaconda3\lib\fnmatch.py", line 52, in _compile_pattern
return re.compile(res).match
File "C:\ProgramData\Anaconda3\lib\re.py", line 252, in compile
return _compile(pattern, flags)
File "C:\ProgramData\Anaconda3\lib\re.py", line 304, in _compile
p = sre_compile.compile(pattern, flags)
File "C:\ProgramData\Anaconda3\lib\sre_compile.py", line 764, in compile
p = sre_parse.parse(p, flags)
File "C:\ProgramData\Anaconda3\lib\sre_parse.py", line 948, in parse
p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0)
File "C:\ProgramData\Anaconda3\lib\sre_parse.py", line 443, in _parse_sub
itemsappend(_parse(source, state, verbose, nested + 1,
File "C:\ProgramData\Anaconda3\lib\sre_parse.py", line 834, in _parse
p = _parse_sub(source, state, sub_verbose, nested + 1)
File "C:\ProgramData\Anaconda3\lib\sre_parse.py", line 443, in _parse_sub
itemsappend(_parse(source, state, verbose, nested + 1,
File "C:\ProgramData\Anaconda3\lib\sre_parse.py", line 598, in _parse
raise source.error(msg, len(this) + 1 + len(that))
re.error: bad character range f-4 at position 34
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\elementary\clients\dbt\dbt_runner.py", line 88, in _run_command
result = subprocess.run(
File "C:\ProgramData\Anaconda3\lib\subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['dbt', 'run', '-s', 'elementary_cli.update_alerts.update_sent_alerts', '--project-dir', 'C:\\ProgramData\\Anaconda3\\Lib\\site-packages\\elementary\\monitor\\dbt_project', '--vars', '{"alert_ids": ["a0bc9ba7-837f-40a9-abe0-9b89a13cab62.model.whitelabel.dim_user"], "sent_at": "2024-03-22 02:10:07"}']' returned non-zero exit status 1.
And since one of the alerts was more than a day old, I am getting the same parsing error for update_skipped_alerts too when it tries to set the alert status to '*skipped*'. Any pointers will be highly appreciated as this is not letting me use slack notifications at all.