Hi there, I have just started using elementary and...
# community-support
j
Hi there, I have just started using elementary and set it up following the docs. Using elementary 0.14.1 with dbt-core 1.6.10 and dbt-redshift 1.6.7. I ran few models one of which failed and then i ran
edr 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 thread
Copy code
$ 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.
I did some more digging around by setting the quiet mode in
update_sent_alerts
to False as below
Copy code
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
Copy code
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.