Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
b18fb74
keep both endpoints and hostnames
wanyunSu Apr 14, 2026
395ecf0
make status command work again
wanyunSu Apr 14, 2026
26d546f
Merge branch 'develop' into wanyunSu/endpoint-hostname-fix
wanyunSu May 11, 2026
474bd10
add status --full and resolve localhost
wanyunSu May 12, 2026
a1cec1f
address comments
wanyunSu May 12, 2026
127f50a
clearer lcs usage
wanyunSu May 19, 2026
b25d8c5
use datacleass for LCS states, safer nodeport service
wanyunSu May 19, 2026
5b7be1a
better use host alias
wanyunSu May 19, 2026
9c16e4e
resolve ip to fqdn
wanyunSu May 26, 2026
35aa59b
fix for ssh
wanyunSu May 26, 2026
ad3ef53
Temp rename of broadcast dir.
jamesturner246 Jun 11, 2026
054df89
Remove broadcasting from controller.
jamesturner246 Jun 11, 2026
7ad16d4
Remove broadcasting from rest of controller package.
jamesturner246 Jun 11, 2026
c4a49b5
Remove all of broadcast package.
jamesturner246 Jun 11, 2026
749ade1
Fix authoriser types.
jamesturner246 Jun 11, 2026
11b90ca
Remove broadcasting from the main PM class.
jamesturner246 Jun 11, 2026
4840f9f
Remove broadcasting from PM subclasses.
jamesturner246 Jun 11, 2026
28f7c5e
Remove broadcast from config and schema.
jamesturner246 Jun 11, 2026
2bd6a5b
Remove broadcast from unified shell.
jamesturner246 Jun 11, 2026
4dca187
Remove broadcast from tests.
jamesturner246 Jun 11, 2026
3b60793
safer terminate lcs, so no stale state when lcs pod dies
wanyunSu Jun 16, 2026
9ed334a
add lock for LCS
wanyunSu Jun 16, 2026
2aee332
remove redundent port for lcs
wanyunSu Jun 16, 2026
5b573d1
address comments above
wanyunSu Jun 17, 2026
298a48c
initial working refactor
Aurashk Jun 17, 2026
536af24
clean up confhandler
Aurashk Jun 17, 2026
cf85336
Merge pull request #927 from DUNE-DAQ/wanyunSu/k8s-lcs
PawelPlesniak Jun 18, 2026
e2064ce
Merge branch 'develop' into wanyunSu/endpoint-hostname-fix
Jun 18, 2026
fcf1c9b
Merge pull request #945 from DUNE-DAQ/jamesturner246/rm_broadcast
PawelPlesniak Jun 18, 2026
2877571
merging develop
Jun 18, 2026
befdc86
Addressing Ruff issues
Jun 18, 2026
73ce807
Merge pull request #879 from DUNE-DAQ/wanyunSu/endpoint-hostname-fix
PawelPlesniak Jun 18, 2026
d84a015
JCF: move the integration tests into the installed codebase
Jun 18, 2026
bee9206
remove confdata entirely
Aurashk Jun 19, 2026
d817a94
JCF: Issue #346: add __init__.py to bring this directory in line with…
Jun 22, 2026
4cbb278
JCF: Issue #346: ...except integtest isn't meant to be an importable …
Jun 22, 2026
ffab17e
JCF: Issue #346: exclude integtest directory from requirement that it…
Jun 22, 2026
8e27c49
update integtest + unify lines
emmuhamm Jun 24, 2026
d203207
Add controller test
emmuhamm Jun 24, 2026
35685e5
Improve fsm sequences bit
emmuhamm Jun 24, 2026
517363a
add controller test to integtest list
emmuhamm Jun 24, 2026
afd2261
Update log names for ssh process manager-like processes (#951)
emmuhamm Jun 25, 2026
3cfa069
JCF: Issue #346: add verbatim a pytest_configure function Pawel provi…
Jun 29, 2026
c168e67
JCF: Issue #346: After testing the previous commit with the test build
Jun 30, 2026
b364b9f
Merge pull request #954 from DUNE-DAQ/johnfreeman/issue346_installed_…
jcfreeman2 Jun 30, 2026
461a988
Removing documentation references to broadcaster
Jul 7, 2026
f1e272a
Making docs check run on every PR
Jul 7, 2026
c8e0a70
Following the new structure
Jul 8, 2026
48bb7a0
Merge branch 'develop' into aurashk/refactor-confhandler-creation
Jul 8, 2026
ec2c33a
Merge pull request #949 from DUNE-DAQ/aurashk/refactor-confhandler-cr…
PawelPlesniak Jul 8, 2026
e4d7c6e
Removing stale broadcaster code
Jul 8, 2026
c44dc01
Updates to fix develop
Jul 8, 2026
8af507d
Fixed tests
Jul 8, 2026
d4f77e1
Merge pull request #969 from DUNE-DAQ/PawelPlesniak/DevelopFix
PawelPlesniak Jul 8, 2026
fee38fd
Merge pull request #967 from DUNE-DAQ/PawelPlesniak/DocsFix
PawelPlesniak Jul 9, 2026
856bd17
Pawel plesniak emuhammad/split shell fixing (#888)
PawelPlesniak Jul 16, 2026
a1845d3
Merge branch 'develop' into emmuhamm/controller-tests
Jul 16, 2026
c86ad1b
Small clean up
Jul 16, 2026
338f87c
Merge pull request #957 from DUNE-DAQ/emmuhamm/controller-tests
PawelPlesniak Jul 16, 2026
fa8a143
Reverting the parsing method of the connectivity service address
Jul 17, 2026
86de8d2
Typo fix, and unsetting the DISPLAY env var from the SSH config
Jul 17, 2026
b045354
RTE script does not need reformatting, but may need it for superuser use
Jul 20, 2026
36708cc
Rollback
Jul 20, 2026
ac840a0
Bump
Jul 20, 2026
b5c0080
Merge pull request #978 from DUNE-DAQ/PawelPlesniak/977
PawelPlesniak Jul 20, 2026
66ee09a
add controller log override
emmuhamm Jun 23, 2026
099cad9
Update ps table no boot
emmuhamm Jul 21, 2026
816d6d4
move ps to impl method (fixes integtest)
emmuhamm Jul 21, 2026
956a589
Fix pytest
emmuhamm Jul 22, 2026
08f8032
typo fix
Jul 22, 2026
1883809
Merge pull request #980 from DUNE-DAQ/emmuhamm/fix-pm-test-979
PawelPlesniak Jul 22, 2026
a0431e5
Disabled X11
Jul 22, 2026
8883488
Force disable X11 entirely
Jul 22, 2026
f119a16
Explicitly unsetting the variable DISPLAY
Jul 22, 2026
7e2d163
Another DISPLAY unset
Jul 22, 2026
407b442
More forceful unsettting of DISPLAY
Jul 22, 2026
b88b13f
Minimizing changes
Jul 22, 2026
eaf156e
Merge pull request #982 from DUNE-DAQ/PawelPlesniak/X11Errors
PawelPlesniak Jul 23, 2026
ee08a48
Merge pull request #956 from DUNE-DAQ/emmuhamm/controller-log-override
PawelPlesniak Jul 24, 2026
5bc74f2
Increasing verbosity
Jul 24, 2026
e306835
Show me the logs
Jul 24, 2026
acc3b82
Changing the tmpdir
Jul 24, 2026
8901f3a
Skipping recommended resource check
Jul 24, 2026
c1c50d9
Rerunning with skip resource checks
Jul 24, 2026
7379997
Merge branch 'develop' into PawelPlesniak/SmallFootprintTestIntermedi…
Jul 27, 2026
6e0eb75
Changing the relevant log path
Jul 27, 2026
456a705
Making debugging clearer
Jul 27, 2026
bc9eb6b
Updating daqsystemtest_integtest_bundle to dunedaq_integtest_bundle
Jul 27, 2026
40f91fd
Adding some more docs, running some checks
Jul 27, 2026
d222eb1
Looking at the wrong path, retrying
Jul 27, 2026
cd6a467
Some minor changes
Jul 27, 2026
8f5a00a
Working around the tree command
Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/actions/setup-dev-nightly/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ runs:
mkdir nightly
cd nightly
source /cvmfs/dunedaq.opensciencegrid.org/setup_dunedaq.sh
setup_dbt latest_v5
setup_dbt latest
dbt-create -n last_fddaq
cd NFD_DEV*
source env.sh
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/check_dirs_init_file.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ jobs:
-path "src/tests*" -o \
-path "src/docs*" -o \
-path "src/config*" -o \
-path "src/drunc/integtest*" -o \
-path "src/drunc/data*" \) -prune -o \
-type d -exec sh -c '[ ! -e "$1/__init__.py" ] && echo "$1"' _ {} \;)

Expand Down
20 changes: 12 additions & 8 deletions .github/workflows/check_docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,26 @@ name: Check Links In Docs

on:
pull_request:
paths:
- 'docs/**'
workflow_dispatch:
workflow_call:
schedule:
- cron: "0 0 * * 6" # midnight every Saturday
workflow_dispatch:
workflow_call:
schedule:
- cron: "0 0 * * 6" # Runs every Saturday at midnight

jobs:
check-links:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Run Lychee link checker
uses: lycheeverse/lychee-action@v2
with:
args: docs/

args: >
--exclude 'https://twiki.cern.ch/.*'
--exclude 'https://indico.*'
--exclude 'https://wiki.dunescience.org/wiki/.*'
--exclude 'https://github.com/DUNE-DAQ/drunc/wiki/Archive:.*'
docs/
19 changes: 14 additions & 5 deletions .github/workflows/run_msqt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,23 +36,32 @@ jobs:
run: |
cd nightly/NFD_DEV* || true
source env.sh
python -m pip install --upgrade pip
cd sourcecode
echo "Checking part of the git clone resolution path: ${{ github.event.pull_request.head.repo.owner.login }}"
git clone https://github.com/${{ github.event.pull_request.head.repo.owner.login }}/druncschema.git -b ${{ github.head_ref }} || git clone https://github.com/DUNE-DAQ/druncschema.git
git clone https://github.com/${{ github.event.pull_request.head.repo.owner.login }}/drunc.git -b ${{ github.head_ref }} || git clone https://github.com/DUNE-DAQ/drunc.git
cd druncschema
pip install .[test]
cd -
cd ../../pythoncode
git clone https://github.com/${{ github.event.pull_request.head.repo.owner.login }}/drunc.git -b ${{ github.head_ref }} || git clone https://github.com/DUNE-DAQ/drunc.git
cd drunc
pip install -e .[dev]
pip install .[test]
echo "DRUNC_DIR=$(pwd)" >> $GITHUB_ENV

- name: Test with MSQT
if: success()
run: |
cd nightly/NFD_DEV* || true
source env.sh
daqsystemtest_integtest_bundle.sh --stop-on-failure --pytest-options "--tb=long" -k small_footprint_quick_test.py 2>&1
echo "Check the permissions of the path used for testing"
ls -lahrt .
echo "Check the repo structure before running tests"
ls -lahrt sourcecode
ls -lahrt pythoncode
echo "Run the tests as the current user: $(whoami)"
echo 'Test command: dunedaq_integtest_bundle.sh --stop-on-failure --pytest-options "--skip-resource-checks" -k small_footprint_quick_test.py --verbosity 5 --tmpdir . 2>&1'
dunedaq_integtest_bundle.sh --stop-on-failure --pytest-options '--skip-resource-checks' -k small_footprint_quick_test.py --verbosity 5 --tmpdir . 2>&1
echo "ECHOING THE INTEGRATION TEST BUNDLE LOG FILE"
cat pytest-of-*/dunedaq_integtest_bundle*.log

- name: Print test log
if: always()
Expand Down
57 changes: 0 additions & 57 deletions docs/Messaging-format.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,12 @@ message Description {
string name = 2;
optional string session = 3;
repeated CommandDescription commands = 4;
optional google.protobuf.Any broadcast = 5;
}
```
* `type` can be `process_manager` or `controller` right now it is a string.
* `name` is the name of the server.
* `session` is the (optional) session name.
* `commands` is a vector of acceptable commands to send to the endpoint.
* `broadcast` is a description of the broadcast service.

`CommandDescription` is used to describe all the commands, it has the following format:
```
Expand All @@ -102,58 +100,3 @@ message CommandDescription {
* `help` is a string providing help
* `return_type` is the format of the `data` field that should be expected inside the `Response` if the command execution was successful.

For broadcasting, there is right now only one format that the `describe` command can fill, with a description of the Kafka service that is used to broadcast the log messages:
```
message KafkaBroadcastHandlerConfiguration{
string kafka_address = 1;
string topic = 2;
}
```
* `kafka_address` is a bootstrap server
* `topic` is the Kafka topic on which this service is logging.

More formats of broadcasting may be added in the future (potentially using [ERS's python binding](https://github.com/DUNE-DAQ/erskafka/tree/develop/python/erskafka)).

# Broadcasting
As mentioned earlier, the only working solution for broadcasting is Kafka. All messages feed to Kafka by drunc have the [form](https://github.com/DUNE-DAQ/druncschema/blob/develop/schema/druncschema/broadcast.proto#L51):
```
message BroadcastMessage{
Emitter emitter = 1;
BroadcastType type = 2;
google.protobuf.Any data = 3;
}
```
Where:
```
message Emitter {
string process = 1;
string session = 2;
}
```
and
```
enum BroadcastType {
ACK = 0;
RECEIVER_REMOVED = 1;
RECEIVER_ADDED = 2;
SERVER_READY = 3;
SERVER_SHUTDOWN = 4;
TEXT_MESSAGE = 15;
COMMAND_EXECUTION_START = 5;
COMMAND_RECEIVED = 16;
COMMAND_EXECUTION_SUCCESS = 6;
EXCEPTION_RAISED = 7;
UNHANDLED_EXCEPTION_RAISED = 8;
STATUS_UPDATE = 9;
SUBPROCESS_STATUS_UPDATE = 10;
DEBUG = 11;
CHILD_COMMAND_EXECUTION_START = 12;
CHILD_COMMAND_EXECUTION_SUCCESS = 13;
CHILD_COMMAND_EXECUTION_FAILED = 14;
FSM_STATUS_UPDATE = 17;
}
```

Note that for now, the `data` field is only filled with [PlainText](https://github.com/DUNE-DAQ/druncschema/blob/develop/schema/druncschema/generic.proto#L7C1-L9C2) messages.

In the future, this may change.
2 changes: 1 addition & 1 deletion docs/Process-manager-interface.md
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ message ExceptionNotification {
Each RPC call is described here.

### `describe`
Returns metadata about the process manager, including available commands, session info, and broadcast description.
Returns metadata about the process manager, including available commands, and session info.
* input: `Request`
* output: [Description](https://dune-daq-sw.readthedocs.io/en/latest/packages/drunc/Messaging-format)

Expand Down
4 changes: 1 addition & 3 deletions docs/Process-manager.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ For a standalone `process_manager` you will need two shells - one shell to run t
To boot a `process_manager`, you will need to choose the most appropriate configuration that applies to the use case. The configurations that are packaged with `drunc` are defined in `drunc/src/data/process_manager/`, which are
* `ssh-standalone.json`: `ssh` based implementation without a `kafka` feed. Uses remote shell client processes to manage ssh connections.
* `ssh-standalone-paramiko-client.json`: `ssh` based implementation without a `kafka` feed. Uses paramiko library to manage ssh connections from the python process. Currently NOT maintained but may be revisited in future - use `ssh-standalone` only for now.
* `ssh-pocket-kafka.json`: `ssh` based implementation with `pocket`'s `kafka` for message broadcasting.
* `ssh-pocket-kafka.json`: `ssh` based implementation with `pocket`'s `kafka`.
* `ssh-CERN-kafka.json`: `ssh` based implementation with `kafka` service running at ENH1.
* `ssh-CERN-kafka-OpMon.json`: `ssh` based implementation with `kafka` service running at ENH1, and with Opmon.
* `k8s.json`: `kubernetes` implementation (not recommended nor working, so don't use this unless you are an working on getting it to work).
Expand All @@ -26,8 +26,6 @@ To start the ssh version without kafka:
drunc-process-manager ssh-standalone
Using 'file://src/drunc/data/process_manager/ssh-standalone.json' as the ProcessManager configuration
Starting 'SSHProcessManager'
[12:43:26] INFO "BroadcastSenderConfHandler": None configuration.py:25
INFO "Controller": DummyAuthoriser ready dummy_authoriser.py:13
ProcessManager was started on np04-srv-019:10054
```
Once this is done, you will not be able to send commands to the process from the current shell with the `process_manager` acting in the foreground. To interact with a standalone instance of `process_manager` you will need to connect to it (see below).
Expand Down
1 change: 0 additions & 1 deletion docs/Unified-shell-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -414,7 +414,6 @@ logs -n root-controller --how-far 5
INFO "Controller": 'df-controller@localhost:5600' (type ChildNodeType.gRPC) controller.py:123
INFO "Controller": 'trg-controller@localhost:5700' (type ChildNodeType.gRPC) controller.py:123
INFO "Controller": 'hsi-controller@localhost:5800' (type ChildNodeType.gRPC) controller.py:123
INFO "Broadcast": ready broadcast_sender.py:65
root-controller was started on localhost:3333
───────────────────────────────────────────────────────────────────────────────────────────── End ──────────────────────────────────────────────────────────────────────────────────────────────
```
Expand Down
2 changes: 1 addition & 1 deletion scripts/drunc_integtest_bundle.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# Based entirely of the implementation of daqsystemtest_integtest_bundle.sh
# Original author: KAB, 10-Oct-2023

integtest_list=( "process_manager_test.py" )
integtest_list=( "process_manager_test.py" "controller_test.py" )
let last_test_index=${#integtest_list[@]}-1

usage() {
Expand Down
5 changes: 4 additions & 1 deletion src/drunc/authoriser/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,7 @@


class DummyAuthoriserConfHandler(ConfHandler):
pass
"""Handler for dummy authoriser configuration."""

def populate_from_dict(self, data: dict[str, object]) -> None:
pass
23 changes: 7 additions & 16 deletions src/drunc/authoriser/dummy_authoriser.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,21 @@
from drunc.utils.utils import get_logger


# TODO: Should be communicating over network
# The Rolls Royce of the authoriser systems
class DummyAuthoriser:
def __init__(
self,
system: SystemType,
configuration_handler: DummyAuthoriserConfHandler = None,
self, configuration: DummyAuthoriserConfHandler, system: SystemType.ValueType
):
self.log = get_logger("utils.authorizer")
self.log.debug("DummyAuthoriser ready")
self.configuration = configuration_handler
self.command_actions = {} # Dict[str, ActionType]
self.configuration = configuration
self.system = system

def is_authorised(
self, token: Token, action: ActionType, system: SystemType, cmd_name: str = ""
self,
token: Token,
action: ActionType.ValueType,
system: SystemType.ValueType,
cmd_name: str,
) -> bool:
self.log.debug(
f"Authorising {token.user_name} to {ActionType.Name(action)} ({cmd_name}) on {SystemType.Name(system)}"
Expand All @@ -30,11 +29,3 @@ def is_authorised(
def authorised_actions(self, token: Token) -> list[str]:
self.log.info(f"Grabbing authorisations for {token.token}")
return []


def main():
DummyAuthoriser()


if __name__ == "__main__":
main()
Empty file removed src/drunc/broadcast/__init__.py
Empty file.
Empty file.
38 changes: 0 additions & 38 deletions src/drunc/broadcast/client/broadcast_handler.py

This file was deleted.

This file was deleted.

43 changes: 0 additions & 43 deletions src/drunc/broadcast/client/configuration.py

This file was deleted.

Loading
Loading