Skip to content

Conversation

@pawelrutkaq
Copy link
Contributor

@pawelrutkaq pawelrutkaq commented Jan 27, 2026

For now kept in HM component, shall be actually in some common place as it shows all 3 components working together.

Closes eclipse-score/score#2476

@github-actions
Copy link

github-actions bot commented Jan 27, 2026

License Check Results

🚀 The license check job ran with the Bazel command:

bazel run //:license-check

Status: ⚠️ Needs Review

Click to expand output
[License Check Output]
Extracting Bazel installation...
Starting local Bazel server (8.4.2) and connecting to it...
INFO: Invocation ID: 6d4c6e54-0af2-4f3d-ac28-b443e71207de
Computing main repo mapping: 
Computing main repo mapping: 
Computing main repo mapping: 
Computing main repo mapping: 
DEBUG: Rule 'rust_qnx8_toolchain+' indicated that a canonical reproducible form can be obtained by modifying arguments integrity = "sha256-eQOopREOYCL5vtTb6c1cwZrql4GVrJ1FqgxarQRe1xs="
DEBUG: Repository rust_qnx8_toolchain+ instantiated at:
  <builtin>: in <toplevel>
Repository rule http_archive defined at:
  /home/runner/.bazel/external/bazel_tools/tools/build_defs/repo/http.bzl:431:31: in <toplevel>
Computing main repo mapping: 
Computing main repo mapping: 
Loading: 
Loading: 2 packages loaded
Loading: 2 packages loaded
    currently loading: 
Loading: 2 packages loaded
    currently loading: 
Loading: 2 packages loaded
    currently loading: 
Analyzing: target //:license-check (3 packages loaded, 0 targets configured)
Analyzing: target //:license-check (3 packages loaded, 0 targets configured)

Analyzing: target //:license-check (37 packages loaded, 10 targets configured)

Analyzing: target //:license-check (89 packages loaded, 10 targets configured)

Analyzing: target //:license-check (131 packages loaded, 78 targets configured)

Analyzing: target //:license-check (148 packages loaded, 2913 targets configured)

Analyzing: target //:license-check (153 packages loaded, 4964 targets configured)

Analyzing: target //:license-check (153 packages loaded, 4964 targets configured)

Analyzing: target //:license-check (159 packages loaded, 9534 targets configured)

Analyzing: target //:license-check (161 packages loaded, 13571 targets configured)

Analyzing: target //:license-check (161 packages loaded, 13571 targets configured)

INFO: Analyzed target //:license-check (162 packages loaded, 13697 targets configured).
INFO: Found 1 target...
Target //:license.check.license_check up-to-date:
  bazel-bin/license.check.license_check
  bazel-bin/license.check.license_check.jar
INFO: Elapsed time: 27.334s, Critical Path: 0.37s
INFO: 13 processes: 4 disk cache hit, 9 internal.
INFO: Build completed successfully, 13 total actions
INFO: Running command line: bazel-bin/license.check.license_check ./formatted.txt <args omitted>
usage: org.eclipse.dash.licenses.cli.Main [-batch <int>] [-cd <url>]
       [-confidence <int>] [-ef <url>] [-excludeSources <sources>] [-help] [-lic
       <url>] [-project <shortname>] [-repo <url>] [-review] [-summary <file>]
       [-timeout <seconds>] [-token <token>]

@github-actions
Copy link

The created documentation from the pull request is available at: docu-html

@pawelrutkaq pawelrutkaq force-pushed the interaction_sequence_diagrams branch from 6f2302a to 3493f35 Compare January 27, 2026 12:46
HealthMonitorBuilder --> user: HealthMonitor instance

user -> HealthMonitor: start()
HealthMonitor -> LaunchDaemon: notify_started(timestamp)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One point of discussion could be if we want to explicitly start the monitoring via a separate IPC call notify_started(timestamp) as described here or just use the existing report_running as a trigger for launch_manager to start the monitoring.

From the user point of view it could be viewed as redundant to have both as both say somewhat "I finished initialization".

I am not sure which one is better, there seem to be advantages/disadvantages in both approaches.

A related question would be: Do we want to support monitoring of applications that do not use the lifecycle api and do not report running state? The diagram currently assumes no.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. notify_started is nothing user calls, user calls HealthMonitor.start() - this call is needed anyway and I thought it will be better if we have at LaunchDaemon clear information that user have started it, otherwise its fully bogus setup that will finalize with LaunchDaemon thinking there is no alive ping. But, guess both optios are valid.
  2. Yes, assumes no - but this does not cover system monitoring, so i still expect you may be monitoring on process level, but this was not the scope of this flow.


== Application Side ==

user -> HealthMonitorBuilder : build(supervisor_api_notification_cycle_time, ...)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would like to add to this diagram:

  • During startup launch_manager reads its config for the application and will know whether it should be monitored or not.
  • If monitoring is enabled, the launch_manager will setup the required IPC communication when starting the process

...

user -> Lifecycle: report_running()
Lifecycle -> LaunchDaemon
Copy link
Contributor

@NicolasFussberger NicolasFussberger Jan 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should also depict when the monitoring stops during shutdown of the application.

My assumption would be that:

  • Launch_manager stops monitoring at the point in time it sends SIGTERM to the application process

Open question:
Does the sending of alive notification on the application side need to be stopped, or is it enough that these are just ignored by launch_manager?
Do we want to support monitoring for "self-terminating" applications that terminate on their own?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Since in app library does not take actions, it shall be fine just to do nothing there. But we shall describe it - correct.
  2. "My assumption would be that" - you mean a point in which the app receive shutdown request via lifecycle ?

main -> HealthMonitor: destroy()
HealthMonitor -> LaunchDaemon: notify_stopped(timestamp)
note left
Notification is send to keep consistent with self terminating case

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have to show the case when the notify_stopped was send but the app did not shutdown within the timeout?

end note
...

user -> Lifecycle: report_running()
Copy link

@vinodreddy-g vinodreddy-g Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should show the case when the timeout of startup to running was crossed?

HealthMonitorBuilder --> user: HealthMonitor instance

user -> HealthMonitor: start()
HealthMonitor -> LaunchDaemon: notify_started(timestamp)
Copy link

@vinodreddy-g vinodreddy-g Jan 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Who is setting up the ipc channel and how?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not yet in scope as we did not tackled usage of mw::com as API. So this we will add once we design MW:COM api after having first working version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Create sequence diagrams for communcation between App and LM

3 participants