Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
280 commits
Select commit Hold shift + click to select a range
83fc20e
Added explicit type name extension to download-resource-size-bytes sl…
jaboehri Feb 19, 2025
3644120
Forgot to increase Task.input cardinality
jaboehri Feb 19, 2025
1cd67c4
Added download-resource-size-bytes as input parameter to make createV…
jaboehri Feb 19, 2025
a6f01b5
Added to represent download and upload speeds + unit for a ping statu…
jaboehri Feb 24, 2025
59f9e41
Added date back in after it was removed before
jaboehri Feb 24, 2025
85ffd1f
Fixed url
jaboehri Feb 24, 2025
737722e
Added network-speed concept
jaboehri Feb 24, 2025
822ef60
Added network speed extension to loaded resources
jaboehri Feb 24, 2025
8b91477
Decided to have the network speed extension only provide general netw…
jaboehri Feb 24, 2025
53a8e46
Added missing code systems and value sets to load. Also, now loads ne…
jaboehri Feb 24, 2025
ef8ad08
Forgot to change usages of pong-sent from changing it in 4d6f6e512ec2…
jaboehri Feb 24, 2025
4d95a01
Forgot to make the second Mbps MBps instead.
jaboehri Feb 24, 2025
77250a6
Added units to constants
jaboehri Feb 24, 2025
6d95189
Added download and upload speed extension urls
jaboehri Feb 24, 2025
877b13b
Added network speed extension url
jaboehri Feb 24, 2025
deafb1f
Added network speed unit extension url
jaboehri Feb 24, 2025
1e1a01d
Renamed url to be in line with other code systems
jaboehri Feb 24, 2025
5b53f26
Added ping units code system url
jaboehri Feb 24, 2025
6c595b9
Added utility functions for download and upload speed extensions
jaboehri Feb 24, 2025
515311d
Added test for new ping status output parameter for download and uplo…
jaboehri Feb 24, 2025
b7927df
Extension.extension only has 2 slices: network-speed and unit
jaboehri Feb 25, 2025
caf4d10
CodeSystem dsf-ping-units.xml has url .../ping-units and not .../dsf-…
jaboehri Feb 25, 2025
e252f26
Extension now gets added correctly. Added missing url value for netwo…
jaboehri Feb 25, 2025
00e8aed
Download-resource-size-bytes input parameter may be omitted to keep c…
jaboehri Feb 25, 2025
70a0824
Fixed meta tag system referencing CodeSystem instead of ValueSet
jaboehri Feb 25, 2025
4aae3f3
Fixed CodeSystem being used as ValueSet
jaboehri Feb 25, 2025
2458a84
Added concept for download-resource-reference needed in input paramet…
jaboehri Feb 25, 2025
c9a93cb
Added input parameter for download-resource-reference
jaboehri Feb 25, 2025
924ed3f
Made naming consistent for downloadedBytes in ping and pong processes
jaboehri Feb 25, 2025
6ed4185
Added codes for downloaded-bytes and downloaded-duration
jaboehri Feb 25, 2025
a8fb521
Added downloaded-bytes and downloaded-duration as input parameters
jaboehri Feb 25, 2025
9d9c1e6
Cleanup message does not need pong status output parameter. Pong stat…
jaboehri Feb 26, 2025
2e1002e
Added helper class to create Input Parameters downloaded-duration-mil…
jaboehri Feb 26, 2025
ac0aa91
Added downloaded-duration-millis and downloaded-bytes as constants fr…
jaboehri Feb 26, 2025
ac0706b
Added downloaded-duration-millis and downloaded-bytes as input parame…
jaboehri Feb 26, 2025
e1e7807
Added field injections for Cleanup Pong task
jaboehri Feb 26, 2025
aa3f3db
CleanupPong message name should be camel-case
jaboehri Feb 26, 2025
7f04735
Added profile, process uri and message name for cleanup pong message
jaboehri Feb 26, 2025
7ef5db5
Adjusted cardinality. Message-name, business-key and correlation-key …
jaboehri Feb 26, 2025
8b3a339
Adjusted cardinality to include optional input parameters downloaded-…
jaboehri Feb 26, 2025
0f37bc1
Added tests for cleanup pong task and pong task with network speed me…
jaboehri Feb 26, 2025
d91c0e2
Added ping units CodeSystem
jaboehri Feb 26, 2025
faee292
Ran format-and-sort
jaboehri Feb 26, 2025
3f8143e
Adjusted to include new fhir resources
jaboehri Feb 26, 2025
5934c33
Fixed wrong auto-complete
jaboehri Feb 26, 2025
a865e67
Added download-resource-reference from ping-CodeSystem as constant
jaboehri Feb 26, 2025
4628ecd
Added util classes to create download-resource-reference and download…
jaboehri Feb 26, 2025
2f4e900
Adjusted cardinality for optional download-resource-size-bytes and do…
jaboehri Feb 26, 2025
41a4e0c
Adjusted createValidTaskPing() to not include optional input paramete…
jaboehri Feb 26, 2025
6437f40
Adjusted version to be in line with plugin definition
jaboehri Feb 26, 2025
219f231
Pong does not need download-resource-size-bytes input parameter
jaboehri Feb 26, 2025
2dc4205
Added utils classes to generate input parameters downloaded-bytes and…
jaboehri Feb 26, 2025
e8bbb9c
Added missing input parameters
jaboehri Feb 26, 2025
cba83d4
Added input parameter error-message to be able to send possible error…
jaboehri Feb 26, 2025
054f43f
Added dummy input parameters
jaboehri Feb 26, 2025
9eee894
Added download-resource-size-bytes input parameter from start task's …
jaboehri Feb 26, 2025
1c0c821
Added download-resource-size-bytes as input parameter to task-start-p…
jaboehri Feb 26, 2025
0a732ed
Ran format-and-sort
jaboehri Feb 26, 2025
93b45aa
Added missing $
jaboehri Feb 26, 2025
dad2a98
Added missing beans
jaboehri Feb 26, 2025
40c0f97
Added missing download-resource-size-bytes input parameter
jaboehri Feb 26, 2025
52ac40d
Used one xml tag instead of two where possible
jaboehri Feb 26, 2025
e22595c
meta.tag.system must be a CodeSystem not a ValueSet
jaboehri Feb 26, 2025
eb24dc9
Moved DownloadedBytesGenerator, DownloadedDurationMillisGenerator, Do…
jaboehri Feb 26, 2025
f5db8c5
Renamed downloadResourceSize to downloadResourceSizeBytes for consist…
jaboehri Feb 26, 2025
0ea2c64
Added downloadResourceSizeBytes bpmn execution variable to constants
jaboehri Feb 26, 2025
64670b4
Added additional service task to set bpmn execution variable download…
jaboehri Feb 26, 2025
87cab58
Ran format-and-sort
jaboehri Feb 26, 2025
eb0f5f3
Forgot to add service task to set downloadResourceSizeBytes execution…
jaboehri Feb 26, 2025
63353a3
Made NetworkSpeedMetricGenerator provide static methods like other in…
jaboehri Feb 26, 2025
a1d8cde
Pong Task has a maximum of 6 inputs, not 5. Added test to confirm
jaboehri Feb 26, 2025
a1a7073
Forgot to rename one instance of downloadResourceSize to downloadReso…
jaboehri Feb 26, 2025
e8cfdf6
Replaced old condition with new check
jaboehri Feb 26, 2025
3c1562f
Added service task to save pong result as execution variable to be re…
jaboehri Feb 26, 2025
ec046a2
Ran format-and-sort
jaboehri Feb 26, 2025
a4245e0
Added cleanupPong to authorization rules
jaboehri Feb 27, 2025
3894aa6
Set cleanupTimerDuration execution variable to dummy value to net get…
jaboehri Feb 27, 2025
f251148
Ran format-and-sot
jaboehri Feb 27, 2025
f81aa07
Added retry time cycle to fix camunda error: OptimisticLockingExcepti…
jaboehri Feb 27, 2025
00f5fa5
cleanup-pong Task mustn't have a correlation key set
jaboehri Feb 27, 2025
f85c1f7
Sending to non-subprocess requires no correlation-key to be present, …
jaboehri Feb 27, 2025
e0c20b9
Now saves missing pong status to execution variables
jaboehri Feb 27, 2025
269ae26
Added resource generation
jaboehri Feb 27, 2025
ddfb34f
Changed default download resource size to 1MB as that is the default …
jaboehri Feb 27, 2025
6366022
Resource generation now limited to maxUploadSizeBytes
jaboehri Feb 27, 2025
a1e3d8f
Added resource cleanup
jaboehri Feb 27, 2025
6c72e3a
Removed maximum amount of error messages that can be added in pong pr…
jaboehri Feb 28, 2025
c4d53ce
First try at implementing download speed measurement. Also, split Dow…
jaboehri Feb 28, 2025
5bfeab0
Ran format-and-sort
jaboehri Feb 28, 2025
a9047c4
Now only cleans up if resource was generated
jaboehri Feb 28, 2025
a4d4290
Added implementation
jaboehri Feb 28, 2025
fffd0ee
Ran format-and-sort
jaboehri Feb 28, 2025
14ca90a
Fixed wrong reference being built
jaboehri Feb 28, 2025
e5c31b0
Removed unnecessary import
jaboehri Feb 28, 2025
3fedb33
Now accounts for downloadResourceReference not being present dependin…
jaboehri Feb 28, 2025
10542ef
Moved more common functionality in BinaryResourceDownloader
jaboehri Feb 28, 2025
71f51ed
Added SetEndpointIdentifier task because changes from last commit mov…
jaboehri Feb 28, 2025
042cb9a
reference string creation streamlined
jaboehri Feb 28, 2025
7c61ecc
Deleted BPMN_EXECUTION_VARIABLE_DOWNLOAD_RESOURCE_ID because it was r…
jaboehri Feb 28, 2025
3219d96
Now uses actual values
jaboehri Feb 28, 2025
36e867b
Now gets webserviceUrl and resource id from IdType
jaboehri Feb 28, 2025
721c72b
Adopted changes made to BinaryResourceDownloader API
jaboehri Feb 28, 2025
18ca610
Fixed logic error
jaboehri Feb 28, 2025
9275efc
Added logging
jaboehri Feb 28, 2025
e96bc73
Target was null after super.doExecute. Moved target acquisition to be…
jaboehri Feb 28, 2025
4321ab7
Fixed wording because it is used by both ping and pong processes
jaboehri Feb 28, 2025
31fe485
Resource deletion only requires the id value
jaboehri Feb 28, 2025
10229b8
Execution variable for downloaded bytes was missing correlationKey in…
jaboehri Mar 11, 2025
78a04ee
Now checks whether a resource download was made and if not, returns a…
jaboehri Mar 11, 2025
b05e3db
Added additional information to resource generation log output to inf…
jaboehri Mar 11, 2025
4e3e4a5
Now uses skipNBytes instead of readNBytes because skipNBytes uses ski…
jaboehri Mar 11, 2025
2c9ca41
Added
jaboehri Mar 11, 2025
ef16c8d
Added estimation based on 10x the download duration
jaboehri Mar 11, 2025
d7f876f
Added new error message constant for error messages set in subprocesses
jaboehri Mar 11, 2025
8b9cb9b
Removed RemoveCorrelationKeyListener and replaced its functionality b…
jaboehri Mar 11, 2025
e75cc7b
Replaced strings with constant values
jaboehri Mar 11, 2025
afc2ca5
Error needs to be handled on intermediate throw event instead as Send…
jaboehri Mar 11, 2025
79185df
Ran format-and-sort
jaboehri Mar 11, 2025
6bf9955
Made PingStatusGenerator provide static utility methods to be in line…
jaboehri Mar 12, 2025
8dbb2ec
Uses more fitting ErrorMessageListUtils method
jaboehri Mar 12, 2025
33a9b8d
Is now a final class with private constructor because constant collec…
jaboehri Mar 12, 2025
173bd6f
Added utility method to retrieve error list
jaboehri Mar 12, 2025
aa2bd4d
SendPong now includes error messages that occurred before sending the…
jaboehri Mar 12, 2025
4a78989
Accessing BPMN_EXECUTION_VARIABLE_STATUS_CODE and BPMN_EXECUTION_VARI…
jaboehri Mar 12, 2025
9b25620
Ran format-and-sort and removed unnecessary imports
jaboehri Mar 12, 2025
dea3d70
Added null check
jaboehri Mar 12, 2025
329d7fb
Ran format-and-sort
jaboehri Mar 12, 2025
a1aa8c3
Ran format-and-sort and replaced access BPMN_EXECUTION_VARIABLE_STATU…
jaboehri Mar 12, 2025
5367311
Ran format-and-sort
jaboehri Mar 12, 2025
6f84aa7
Accessing BPMN_EXECUTION_VARIABLE_DOWNLOADED_BYTES and BPMN_EXECUTION…
jaboehri Mar 12, 2025
1f6ef95
Replaced string with constant
jaboehri Mar 12, 2025
a117f70
Removed logging statement as generateRandomBinaryContent() already lo…
jaboehri Mar 12, 2025
615e0d5
Replaced array list with vector as a thread-safe list implementation …
jaboehri Mar 12, 2025
a2e21d4
Removed unnecessary annotation
jaboehri Mar 12, 2025
c889862
Constant access is now getter call
jaboehri Mar 12, 2025
300a04d
Added a minimum timer duration of 20s
jaboehri Mar 12, 2025
6e04e0d
Added utility method to add a list of strings as error messages
jaboehri Mar 12, 2025
428588f
Added process names to process documentation for maxDownloadSizeBytes…
jaboehri Mar 12, 2025
c16ac9f
Renamed SaveDownloadSpeeds to SaveDownloadSpeedsPing to indicate that…
jaboehri Mar 12, 2025
92c3ada
Now saves download information and error messages
jaboehri Mar 12, 2025
88e4418
Removed LogSendError task as Ping now logs errors itself
jaboehri Mar 12, 2025
cd12323
Added NetworkSpeedCalculator. Changed PingStatusGenerator and TaskPro…
jaboehri Mar 12, 2025
004dba1
Added PingPongDeploymentStateListener to validate networkSpeedUnit en…
jaboehri Mar 12, 2025
67ce904
Added list of dsf ping unit codesystem values to easily validate them…
jaboehri Mar 12, 2025
a71bfa1
Added networkSpeedUnit environment variable and deployment listener t…
jaboehri Mar 12, 2025
0c69733
Added storage logic
jaboehri Mar 12, 2025
dae78db
Now adds information on network speeds to task output
jaboehri Mar 12, 2025
57772e9
Rearranged the end of the process. Previously, download speeds only g…
jaboehri Mar 13, 2025
4eb7cbb
Renamed "Save Download Speeds" in pong.bpmn to "Save Upload Speeds" b…
jaboehri Mar 13, 2025
d1a4a85
Removed "Save Download Speeds" because this is already done in "Downl…
jaboehri Mar 13, 2025
408fe65
Moved service delegates into more appropriate packages
jaboehri Mar 13, 2025
d417c52
Deleted LogAndSaveSendError as this is done by Ping itself in handleI…
jaboehri Mar 13, 2025
af1eac7
Renamed StoreDownloadSpeeds to StoreNetworkSpeeds as both upload and …
jaboehri Mar 13, 2025
9998f41
Ran format-and-sort
jaboehri Mar 13, 2025
750c018
Added more utility methods to update existing status output parameters
jaboehri Mar 13, 2025
85f3332
StoreNetworkSpeeds replaced by StoreUploadSpeeds as network speeds ca…
jaboehri Mar 13, 2025
5484402
Added new constant to indicate that the binary resource was downloade…
jaboehri Mar 13, 2025
91886db
Method is not specific to ping status
jaboehri Mar 13, 2025
33c1048
Ran format-and-sort
jaboehri Mar 13, 2025
e2aca4c
Added more utility methods to provide the same functionality but with…
jaboehri Mar 13, 2025
c4566f6
Added StoreDownloadSpeed
jaboehri Mar 13, 2025
4884994
Todo done
jaboehri Mar 13, 2025
ea3b4fa
Added implementation to StoreUploadSpeed
jaboehri Mar 13, 2025
c87362d
Ran format-and-sort
jaboehri Mar 14, 2025
0236c1e
Should have been downloaded duration, not uploaded duration in StoreD…
jaboehri Mar 14, 2025
d916542
Added MathContext
jaboehri Mar 14, 2025
c8ea5ad
Added null checks and getErrorMessageList now creates the list if it …
jaboehri Mar 14, 2025
899bb3c
Error message is now added to error message list instead of being a s…
jaboehri Mar 14, 2025
f14930c
Added handling for 0 bytes downloaded and 0 download duration
jaboehri Mar 14, 2025
7373144
Added handling for 0 bytes downloaded and 0 download duration
jaboehri Mar 14, 2025
c372ebd
Fixed wrong method being called
jaboehri Mar 14, 2025
e1f6d28
Fixed naming
jaboehri Mar 14, 2025
00a96be
Added missing fhir resource
jaboehri Mar 14, 2025
6699b1e
Now uses update instead of create because there is already an output …
jaboehri Mar 14, 2025
2c99713
Upload speed is read from cleanup task, not from execution variables
jaboehri Mar 14, 2025
72b919a
Now uses actual download results
jaboehri Mar 14, 2025
5f906eb
Ran format-and-sort
jaboehri Mar 14, 2025
789e449
Now adds upload and download data with 0 as values if an error occurr…
jaboehri Mar 14, 2025
647058b
Replaced MathContext with BigDecimal.scale because MathContext descri…
jaboehri Mar 14, 2025
ebc5bb2
Added case for pong-missing status and now reads error message list i…
jaboehri Mar 14, 2025
0fd4e84
Error message gets added to global error message list instead
jaboehri Mar 14, 2025
5f22772
Now uses ConstantsPing api to get consistent variable name
jaboehri Mar 14, 2025
1f8d0d7
Removed LogNoResponse as it was replaced by LogAndSaveNoResponse
jaboehri Mar 14, 2025
f2cff95
LogPing belongs to pong process
jaboehri Mar 14, 2025
f8e7fca
This wasn't caught by IDE refactor when the class was deleted
jaboehri Mar 14, 2025
c22fbcd
Moved mail service call to appropriate spot
jaboehri Mar 14, 2025
34fb2d4
Removed unnecessary import
jaboehri Mar 14, 2025
2aae25c
Ran format-and-sort
jaboehri Mar 14, 2025
54957d7
Final results are now rounded to 2 decimal places
jaboehri Mar 14, 2025
e1c4a65
Fixed two outputs being generated for each target
jaboehri Mar 14, 2025
939c3db
"Fixed" race condition by adding asynchronous continuation with retry…
jaboehri Mar 14, 2025
e2696f9
Fixed env variable names to be consistent
jaboehri Mar 14, 2025
bda4e25
Fixed wrong amount of input parameters being allowed
jaboehri Mar 14, 2025
001f4ac
Added version utils to add versions to urls in PingStatusGenerator
jaboehri Mar 14, 2025
e77b642
Added versions to urls
jaboehri Mar 14, 2025
9174bd3
Revert "Added versions to urls"
jaboehri Mar 18, 2025
da518c7
Revert "Added version utils to add versions to urls in PingStatusGene…
jaboehri Mar 18, 2025
04cfa68
Added tests for draft task resources
jaboehri Mar 18, 2025
c7c9508
Added ping pong v1 CodeSystems and ValueSets to test compatibility to…
jaboehri Mar 18, 2025
0785bd8
Added ping pong v1 CodeSystems and ValueSets to test compatibility to…
jaboehri Mar 18, 2025
98a3348
Changed resource loading order
jaboehri Mar 18, 2025
8b6a7ee
Renamed CodeSystem and ValueSet urls as a workaround because FHIR val…
jaboehri Mar 18, 2025
bb8626a
Fixed inputs being wrongfully added as outputs
jaboehri Mar 18, 2025
49f3747
Added old extension to replicate a problem from actually running the …
jaboehri Mar 18, 2025
a26c5a6
Renamed extension url as a workaround because FHIR validation fails d…
jaboehri Mar 18, 2025
32555f9
Providing a download resource size is now optional. It will take the …
jaboehri Mar 18, 2025
87c23a7
Revert "Now adds upload and download data with 0 as values if an erro…
jaboehri Mar 18, 2025
3886cc8
Revert "Error message is now added to error message list instead of b…
jaboehri Mar 18, 2025
219eca6
Now correctly shows status code in output if ping fails to be sent to…
jaboehri Mar 18, 2025
80c5444
Deleted SaveUploadSpeeds because it was unused
jaboehri Mar 18, 2025
a09d915
Added version placeholder to ping status extension in order to differ…
jaboehri Mar 18, 2025
ad3fe74
Improved logging by adding a new logger that outputs the Start-Task's…
jaboehri Mar 18, 2025
e6d3bea
Ran format-and-sort
jaboehri Mar 18, 2025
f7f8e4d
Removed unused imports
jaboehri Mar 18, 2025
2c7b3e3
Fused GenerateResource and StoreResource because Camunda will persist…
jaboehri Mar 19, 2025
5d6c463
maxDownloadSizeBytes and maxUploadSizeBytes are now integers because …
jaboehri Mar 19, 2025
ff4510b
Removed description on error events as that is not the only reason fo…
jaboehri Mar 19, 2025
5496817
Updated to include methods to update the error list in the status out…
jaboehri Mar 19, 2025
4bbc1bf
Fixed all error messages appearing on all ping status outputs
jaboehri Mar 19, 2025
a755321
Adopted changes to PingStatusGenerator
jaboehri Mar 19, 2025
fbfcf48
Now has the option to store an access a correlation key specific erro…
jaboehri Mar 19, 2025
82d1ba4
Adopted changes to PingStatusGenerator and now updates status with er…
jaboehri Mar 19, 2025
f95a4dd
DownloadResourceAndMeasureSpeed and DownloadResourceAndMeasureSpeedIn…
jaboehri Mar 19, 2025
44b820d
Ran format-and-sort
jaboehri Mar 19, 2025
ff002b1
Fixed resource not being stored to local FHIR server because referenc…
jaboehri Mar 19, 2025
c0cc2e9
Outputs now all get sorted in the same way to produce consistent outputs
jaboehri Mar 19, 2025
596f5a5
Errors are now all stored at the end of the pong process. Added SaveT…
jaboehri Mar 19, 2025
a96c4d3
Added more context to error messages
jaboehri Mar 19, 2025
a33d21a
Ran format-and-sort
jaboehri Mar 19, 2025
50f9116
Improved other branch of error message as well
jaboehri Mar 19, 2025
4817202
Added hard limit to download and upload sizes to avoid Java running o…
jaboehri Mar 19, 2025
16ef975
Ran format-and-sort
jaboehri Mar 19, 2025
ba80d95
RC1
jaboehri Mar 19, 2025
9cee86d
Synchronized timer description with timeout value
jaboehri Mar 19, 2025
1e79ec8
Binary content does need to be encoded because it already gets encode…
jaboehri Mar 19, 2025
17accd8
Fixed a bug that caused the process to crash when executing slim ping…
jaboehri Mar 19, 2025
2c687b8
Fixed a bug where outputs were not detected as ping status outputs re…
jaboehri Mar 19, 2025
e54b788
Removed unused imports
jaboehri Mar 19, 2025
7fb514a
Added error handling for HTTP request to fetch resource behind reference
jaboehri Mar 19, 2025
1b445d6
Moved LogPing to place where it actually makes sense
jaboehri Mar 19, 2025
a17671b
Added error handling for missing download resource reference in message
jaboehri Mar 20, 2025
912f532
Added error handling when failing to post binary resource to local FH…
jaboehri Mar 20, 2025
5178260
Fixed nullpointer
jaboehri Mar 20, 2025
a899b71
Removed unused import
jaboehri Mar 21, 2025
aaf292c
Improved error messages. If the exception was a WebApplicationExcepti…
jaboehri Mar 21, 2025
742c32a
Added information on ping-ping v2.x
jaboehri Mar 21, 2025
9b736ed
Fixed parenthesis
jaboehri Mar 21, 2025
d7df781
Added missing error code to error boundary event
jaboehri Mar 21, 2025
dcf3fd6
Added missing error code to error boundary event
jaboehri Mar 21, 2025
9cd1586
v2.0.0.0-RC2
jaboehri Mar 21, 2025
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
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

In this repository you will find the ping-pong process for connection testing, which can be deployed on the [DSF](https://github.com/datasharingframework/dsf).

## Version 2.x release
Version 2.x of the ping-pong process (dubbed "Fat-Ping") includes the ability to test whether downloading FHIR resources from other DSF instances is possible. This also includes approximately measuring the network speed of resource downloads with larger download sizes (~100MB) returning more accurate results. It retains the ability to make connection tests without downloading resource like ping-pong 1.x. Documentation on configuration is available in the [wiki](https://github.com/datasharingframework/dsf-process-ping-pong/wiki).

## Development
Branching follows the git-flow model, for the latest development version see branch [develop](https://github.com/datasharingframework/dsf-process-ping-pong/tree/develop).

Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@

<groupId>dev.dsf</groupId>
<artifactId>dsf-process-ping-pong</artifactId>
<version>1.0.1.0-SNAPSHOT</version>
<version>2.0.0.0-RC2</version>
<packaging>jar</packaging>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<compileSource>17</compileSource>
<compileTarget>17</compileTarget>

<dsf.version>1.2.0-RC1</dsf.version>
<dsf.version>1.2.0</dsf.version>
<dsf.location>../dsf</dsf.location>
</properties>

Expand Down
237 changes: 183 additions & 54 deletions src/main/java/dev/dsf/bpe/ConstantsPing.java
Original file line number Diff line number Diff line change
@@ -1,59 +1,188 @@
package dev.dsf.bpe;

import java.util.List;

public interface ConstantsPing
import jakarta.ws.rs.core.MediaType;

public final class ConstantsPing
{
String PROCESS_NAME_PING_AUTOSTART = "pingAutostart";
String PROCESS_NAME_PING = "ping";
String PROCESS_NAME_PONG = "pong";

String PROCESS_NAME_FULL_PING_AUTOSTART = "dsfdev_" + PROCESS_NAME_PING_AUTOSTART;
String PROCESS_NAME_FULL_PING = "dsfdev_" + PROCESS_NAME_PING;
String PROCESS_NAME_FULL_PONG = "dsfdev_" + PROCESS_NAME_PONG;

String PROCESS_DSF_URI_BASE = "http://dsf.dev/bpe/Process/";

String PROFILE_DSF_TASK_START_PING_AUTOSTART = "http://dsf.dev/fhir/StructureDefinition/task-start-ping-autostart";
String PROFILE_DSF_TASK_START_PING_AUTOSTART_PROCESS_URI = PROCESS_DSF_URI_BASE + PROCESS_NAME_PING_AUTOSTART;
String PROFILE_DSF_TASK_START_PING_AUTOSTART_MESSAGE_NAME = "startPingAutostart";

String PROFILE_DSF_TASK_STOP_PING_AUTOSTART = "http://dsf.dev/fhir/StructureDefinition/task-stop-ping-autostart";
String PROFILE_DSF_TASK_STOP_PING_AUTOSTART_PROCESS_URI = PROCESS_DSF_URI_BASE + PROCESS_NAME_PING_AUTOSTART;
String PROFILE_DSF_TASK_STOP_PING_AUTOSTART_MESSAGE_NAME = "stopPingAutostart";

String PROFILE_DSF_TASK_START_PING = "http://dsf.dev/fhir/StructureDefinition/task-start-ping";
String PROFILE_DSF_TASK_START_PING_MESSAGE_NAME = "startPing";

String PROFILE_DSF_TASK_PING = "http://dsf.dev/fhir/StructureDefinition/task-ping";
String PROFILE_DSF_TASK_PING_PROCESS_URI = PROCESS_DSF_URI_BASE + PROCESS_NAME_PING;
String PROFILE_DSF_TASK_PING_MESSAGE_NAME = "ping";

String PROFILE_DSF_TASK_PONG_TASK = "http://dsf.dev/fhir/StructureDefinition/task-pong";
String PROFILE_DSF_TASK_PONG_PROCESS_URI = PROCESS_DSF_URI_BASE + PROCESS_NAME_PONG;
String PROFILE_DSF_TASK_PONG_MESSAGE_NAME = "pong";

String CODESYSTEM_DSF_PING = "http://dsf.dev/fhir/CodeSystem/ping";
String CODESYSTEM_DSF_PING_VALUE_PING_STATUS = "ping-status";
String CODESYSTEM_DSF_PING_VALUE_PONG_STATUS = "pong-status";
String CODESYSTEM_DSF_PING_VALUE_ENDPOINT_IDENTIFIER = "endpoint-identifier";
String CODESYSTEM_DSF_PING_VALUE_TARGET_ENDPOINTS = "target-endpoints";
String CODESYSTEM_DSF_PING_VALUE_TIMER_INTERVAL = "timer-interval";

String CODESYSTEM_DSF_PING_STATUS = "http://dsf.dev/fhir/CodeSystem/ping-status";
String CODESYSTEM_DSF_PING_STATUS_VALUE_NOT_ALLOWED = "not-allowed";
String CODESYSTEM_DSF_PING_STATUS_VALUE_NOT_REACHABLE = "not-reachable";
String CODESYSTEM_DSF_PING_STATUS_VALUE_PONG_MISSING = "pong-missing";
String CODESYSTEM_DSF_PING_STATUS_VALUE_PONG_RECEIVED = "pong-received";
String CODESYSTEM_DSF_PING_STATUS_VALUE_PONG_SEND = "pong-send";

String EXTENSION_URL_PING_STATUS = "http://dsf.dev/fhir/StructureDefinition/extension-ping-status";
String EXTENSION_URL_CORRELATION_KEY = "correlation-key";
String EXTENSION_URL_ORGANIZATION_IDENTIFIER = "organization-identifier";
String EXTENSION_URL_ENDPOINT_IDENTIFIER = "endpoint-identifier";
String EXTENSION_URL_ERROR_MESSAGE = "error-message";

String BPMN_EXECUTION_VARIABLE_TIMER_INTERVAL = "timerInterval";
String BPMN_EXECUTION_VARIABLE_STOP_TIMER = "stopTimer";

String TIMER_INTERVAL_DEFAULT_VALUE = "PT24H";
private ConstantsPing()
{
}

public static final String PROCESS_NAME_PING_AUTOSTART = "pingAutostart";
public static final String PROCESS_NAME_PING = "ping";
public static final String PROCESS_NAME_PONG = "pong";

public static final String PROCESS_NAME_FULL_PING_AUTOSTART = "dsfdev_" + PROCESS_NAME_PING_AUTOSTART;
public static final String PROCESS_NAME_FULL_PING = "dsfdev_" + PROCESS_NAME_PING;
public static final String PROCESS_NAME_FULL_PONG = "dsfdev_" + PROCESS_NAME_PONG;

public static final String PROCESS_DSF_URI_BASE = "http://dsf.dev/bpe/Process/";

public static final String PROFILE_DSF_TASK_START_PING_AUTOSTART = "http://dsf.dev/fhir/StructureDefinition/task-start-ping-autostart";
public static final String PROFILE_DSF_TASK_START_PING_AUTOSTART_PROCESS_URI = PROCESS_DSF_URI_BASE
+ PROCESS_NAME_PING_AUTOSTART;
public static final String PROFILE_DSF_TASK_START_PING_AUTOSTART_MESSAGE_NAME = "startPingAutostart";

public static final String PROFILE_DSF_TASK_STOP_PING_AUTOSTART = "http://dsf.dev/fhir/StructureDefinition/task-stop-ping-autostart";
public static final String PROFILE_DSF_TASK_STOP_PING_AUTOSTART_PROCESS_URI = PROCESS_DSF_URI_BASE
+ PROCESS_NAME_PING_AUTOSTART;
public static final String PROFILE_DSF_TASK_STOP_PING_AUTOSTART_MESSAGE_NAME = "stopPingAutostart";

public static final String PROFILE_DSF_TASK_START_PING = "http://dsf.dev/fhir/StructureDefinition/task-start-ping";
public static final String PROFILE_DSF_TASK_START_PING_MESSAGE_NAME = "startPing";

public static final String PROFILE_DSF_TASK_PING = "http://dsf.dev/fhir/StructureDefinition/task-ping";
public static final String PROFILE_DSF_TASK_PING_PROCESS_URI = PROCESS_DSF_URI_BASE + PROCESS_NAME_PING;
public static final String PROFILE_DSF_TASK_PING_MESSAGE_NAME = "ping";

public static final String PROFILE_DSF_TASK_PONG_TASK = "http://dsf.dev/fhir/StructureDefinition/task-pong";
public static final String PROFILE_DSF_TASK_PONG_PROCESS_URI = PROCESS_DSF_URI_BASE + PROCESS_NAME_PONG;
public static final String PROFILE_DSF_TASK_PONG_MESSAGE_NAME = "pong";

public static final String PROFILE_DSF_TASK_CLEANUP_PONG = "http://dsf.dev/fhir/StructureDefinition/task-cleanup-pong";
public static final String PROFILE_DSF_TASK_CLEANUP_PONG_PROCESS_URI = PROCESS_DSF_URI_BASE + PROCESS_NAME_PONG;
public static final String PROFILE_DSF_TASK_CLEANUP_PONG_MESSAGE_NAME = "cleanupPong";

public static final String CODESYSTEM_DSF_PING = "http://dsf.dev/fhir/CodeSystem/ping-v2";
public static final String CODESYSTEM_DSF_PING_VALUE_PING_STATUS = "ping-status";
public static final String CODESYSTEM_DSF_PING_VALUE_PONG_STATUS = "pong-status";
public static final String CODESYSTEM_DSF_PING_VALUE_ENDPOINT_IDENTIFIER = "endpoint-identifier";
public static final String CODESYSTEM_DSF_PING_VALUE_TARGET_ENDPOINTS = "target-endpoints";
public static final String CODESYSTEM_DSF_PING_VALUE_TIMER_INTERVAL = "timer-interval";
public static final String CODESYSTEM_DSF_PING_VALUE_DOWNLOAD_RESOURCE_SIZE_BYTES = "download-resource-size-bytes";
public static final String CODESYSTEM_DSF_PING_VALUE_DOWNLOADED_DURATION_MILLIS = "downloaded-duration-millis";
public static final String CODESYSTEM_DSF_PING_VALUE_DOWNLOADED_BYTES = "downloaded-bytes";
public static final String CODESYSTEM_DSF_PING_VALUE_DOWNLOAD_RESOURCE_REFERENCE = "download-resource-reference";

public static final String CODESYSTEM_DSF_PING_STATUS = "http://dsf.dev/fhir/CodeSystem/ping-status-v2";
public static final String CODESYSTEM_DSF_PING_STATUS_VALUE_NOT_ALLOWED = "not-allowed";
public static final String CODESYSTEM_DSF_PING_STATUS_VALUE_NOT_REACHABLE = "not-reachable";
public static final String CODESYSTEM_DSF_PING_STATUS_VALUE_PONG_MISSING = "pong-missing";
public static final String CODESYSTEM_DSF_PING_STATUS_VALUE_PONG_RECEIVED = "pong-received";
public static final String CODESYSTEM_DSF_PING_STATUS_VALUE_PONG_SENT = "pong-sent";
public static final String CODESYSTEM_DSF_PING_STATUS_VALUE_ERROR_MESSAGE = "error-message";
public static final String CODESYSTEM_DSF_PING_STATUS_VALUE_RESOURCE_DOWNLOADED = "resource-downloaded";

public static final String CODESYSTEM_DSF_PING_UNITS = "http://dsf.dev/fhir/CodeSystem/ping-units-v2";
public static final String CODESYSTEM_DSF_PING_UNITS_VALUE_BITS_PER_SECOND = "bits-per-second";
public static final String CODESYSTEM_DSF_PING_UNITS_VALUE_BYTES_PER_SECOND = "bytes-per-second";
public static final String CODESYSTEM_DSF_PING_UNITS_VALUE_MEGABITS_PER_SECOND = "megabits-per-second";
public static final String CODESYSTEM_DSF_PING_UNITS_VALUE_MEGABYTES_PER_SECOND = "megabytes-per-second";

public static final List<String> CODESYSTEM_DSF_PING_UNITS_VALUES = List.of(
CODESYSTEM_DSF_PING_UNITS_VALUE_BITS_PER_SECOND, CODESYSTEM_DSF_PING_UNITS_VALUE_BYTES_PER_SECOND,
CODESYSTEM_DSF_PING_UNITS_VALUE_MEGABITS_PER_SECOND, CODESYSTEM_DSF_PING_UNITS_VALUE_MEGABYTES_PER_SECOND);

public static final String CODESYSTEM_READ_ACCESS_TAG = "http://dsf.dev/fhir/CodeSystem/read-access-tag";
public static final String CODESYSTEM_READ_ACCESS_TAG_VALUE_ALL = "ALL";

public static final String EXTENSION_URL_PING_STATUS = "http://dsf.dev/fhir/StructureDefinition/extension-ping-status-v2";
public static final String EXTENSION_URL_NETWORK_SPEED = "http://dsf.dev/fhir/StructureDefinition/extension-network-speed";
public static final String EXTENSION_URL_CORRELATION_KEY = "correlation-key";
public static final String EXTENSION_URL_ORGANIZATION_IDENTIFIER = "organization-identifier";
public static final String EXTENSION_URL_ENDPOINT_IDENTIFIER = "endpoint-identifier";
public static final String EXTENSION_URL_ERROR_MESSAGE = "error-message";
public static final String EXTENSION_URL_DOWNLOAD_SPEED = "download-speed";
public static final String EXTENSION_URL_UPLOAD_SPEED = "upload-speed";
public static final String EXTENSION_URL_NETWORK_SPEED_UNIT = "unit";
public static final String EXTENSION_URL_NETWORK_SPEED_VALUE = "network-speed";

public static final String BPMN_EXECUTION_VARIABLE_TIMER_INTERVAL = "timerInterval";
public static final String BPMN_EXECUTION_VARIABLE_STOP_TIMER = "stopTimer";
public static final String BPMN_EXECUTION_VARIABLE_DOWNLOAD_RESOURCE_SIZE_BYTES = "downloadResourceSizeBytes";
public static final String BPMN_EXECUTION_VARIABLE_DOWNLOAD_RESOURCE = "downloadResource";
public static final String BPMN_EXECUTION_VARIABLE_DOWNLOAD_RESOURCE_REFERENCE = "downloadResourceReference";
private static final String BPMN_EXECUTION_VARIABLE_STATUS_CODE = "statusCode";
private static final String BPMN_EXECUTION_VARIABLE_ERROR_MESSAGE = "errorMessage";
private static final String BPMN_EXECUTION_VARIABLE_ERROR_MESSAGE_LIST = "errorMessages";
private static final String BPMN_EXECUTION_VARIABLE_DOWNLOADED_BYTES = "downloadedBytes";
private static final String BPMN_EXECUTION_VARIABLE_DOWNLOADED_DURATION_MILLIS = "downloadedDurationMillis";
public static final String BPMN_EXECUTION_VARIABLE_PONG_TARGET_ENDPOINT_IDENTIFIER = "targetEndpointIdentifier";
private static final String BPMN_EXECUTION_VARIABLE_UPLOADED_BYTES = "uploadedBytes";
private static final String BPMN_EXECUTION_VARIABLE_UPLOADED_DURATION_MILLIS = "uploadedDurationMillis";
public static final String BPMN_EXECUTION_VARIABLE_RESOURCE_DOWNLOAD_ERROR_MESSAGE = "resourceDownloadErrorMessage";
public static final String BPMN_EXECUTION_VARIABLE_RESOURCE_UPLOAD_ERROR_MESSAGE = "resourceUploadErrorMessage";

public static final String BPMN_ERROR_CODE_RESOURCE_DOWNLOAD_ERROR = "resourceDownloadError";
public static final String BPMN_ERROR_CODE_RESOURCE_UPLOAD_ERROR = "resourceUploadError";

public static final String PONG_ERROR_MESSAGE_CLEANUP_TIMEOUT = "Timeout while waiting for cleanup message";

public static final int DOWNLOAD_RESOURCE_SIZE_BYTES_DEFAULT = 10000000;

public static final MediaType DOWNLOAD_RESOURCE_MIME_TYPE = MediaType.APPLICATION_OCTET_STREAM_TYPE;

public static final String TIMER_INTERVAL_DEFAULT_VALUE = "PT24H";

public static String getBpmnExecutionVariableStatusCode()
{
return BPMN_EXECUTION_VARIABLE_STATUS_CODE;
}

public static String getBpmnExecutionVariableStatusCode(String correlationKey)
{
return BPMN_EXECUTION_VARIABLE_STATUS_CODE + "_" + correlationKey;
}

public static String getBpmnExecutionVariableErrorMessage()
{
return BPMN_EXECUTION_VARIABLE_ERROR_MESSAGE;
}

public static String getBpmnExecutionVariableErrorMessage(String correlationKey)
{
return BPMN_EXECUTION_VARIABLE_ERROR_MESSAGE + "_" + correlationKey;
}

public static String getBpmnExecutionVariableDownloadedBytes()
{
return BPMN_EXECUTION_VARIABLE_DOWNLOADED_BYTES;
}

public static String getBpmnExecutionVariableDownloadedBytes(String correlationKey)
{
return BPMN_EXECUTION_VARIABLE_DOWNLOADED_BYTES + "_" + correlationKey;
}

public static String getBpmnExecutionVariableDownloadedDurationMillis()
{
return BPMN_EXECUTION_VARIABLE_DOWNLOADED_DURATION_MILLIS;
}

public static String getBpmnExecutionVariableDownloadedDurationMillis(String correlationKey)
{
return BPMN_EXECUTION_VARIABLE_DOWNLOADED_DURATION_MILLIS + "_" + correlationKey;
}

public static String getBpmnExecutionVariableUploadedBytes()
{
return BPMN_EXECUTION_VARIABLE_UPLOADED_BYTES;
}

public static String getBpmnExecutionVariableUploadedBytes(String correlationKey)
{
return BPMN_EXECUTION_VARIABLE_UPLOADED_BYTES + "_" + correlationKey;
}

public static String getBpmnExecutionVariableUploadedDurationMillis()
{
return BPMN_EXECUTION_VARIABLE_UPLOADED_DURATION_MILLIS;
}

public static String getBpmnExecutionVariableUploadedDurationMillis(String correlationKey)
{
return BPMN_EXECUTION_VARIABLE_UPLOADED_DURATION_MILLIS + "_" + correlationKey;
}

public static String getBpmnExecutionVariableErrorMessageList()
{
return BPMN_EXECUTION_VARIABLE_ERROR_MESSAGE_LIST;
}

public static String getBpmnExecutionVariableErrorMessageList(String correlationKey)
{
return getBpmnExecutionVariableErrorMessageList() + "_" + correlationKey;
}
}
16 changes: 10 additions & 6 deletions src/main/java/dev/dsf/bpe/PingProcessPluginDefinition.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@

public class PingProcessPluginDefinition implements ProcessPluginDefinition
{
public static final String VERSION = "1.0.1.0";
public static final LocalDate RELEASE_DATE = LocalDate.of(2023, 9, 5);
public static final String VERSION = "2.0.0.0";
public static final LocalDate RELEASE_DATE = LocalDate.of(2023, 9, 12);

@Override
public String getName()
Expand Down Expand Up @@ -52,29 +52,33 @@ public Map<String, List<String>> getFhirResourcesByProcessId()

var cPing = "fhir/CodeSystem/dsf-ping.xml";
var cPingStatus = "fhir/CodeSystem/dsf-ping-status.xml";
var cPingUnits = "fhir/CodeSystem/dsf-ping-units.xml";

var sPingStatus = "fhir/StructureDefinition/dsf-extension-ping-status.xml";
var sPing = "fhir/StructureDefinition/dsf-task-ping.xml";
var sPong = "fhir/StructureDefinition/dsf-task-pong.xml";
var sStartPing = "fhir/StructureDefinition/dsf-task-start-ping.xml";
var sStartPingAutostart = "fhir/StructureDefinition/dsf-task-start-ping-autostart.xml";
var sStopPingAutostart = "fhir/StructureDefinition/dsf-task-stop-ping-autostart.xml";
var sCleanupPong = "fhir/StructureDefinition/dsf-task-cleanup-pong.xml";
var sNetworkSpeedExtension = "fhir/StructureDefinition/dsf-extension-network-speed.xml";

var tStartPing = "fhir/Task/dsf-task-start-ping.xml";
var tStartPingAutoStart = "fhir/Task/dsf-task-start-ping-autostart.xml";
var tStopPingAutoStart = "fhir/Task/dsf-task-stop-ping-autostart.xml";

var vPing = "fhir/ValueSet/dsf-ping.xml";
var vPingUnits = "fhir/ValueSet/dsf-ping-units.xml";
var vPingStatus = "fhir/ValueSet/dsf-ping-status.xml";
var vPongStatus = "fhir/ValueSet/dsf-pong-status.xml";

return Map.of(ConstantsPing.PROCESS_NAME_FULL_PING,
Arrays.asList(
aPing, cPing, cPingStatus, sPingStatus, sStartPing, sPong, tStartPing, vPing, vPingStatus),
Arrays.asList(aPing, cPing, cPingStatus, cPingUnits, sPingStatus, sStartPing, sPong, sCleanupPong,
sNetworkSpeedExtension, tStartPing, vPing, vPingStatus, vPingUnits),
ConstantsPing.PROCESS_NAME_FULL_PING_AUTOSTART,
Arrays.asList(aPingAutostart, cPing, sStartPingAutostart, sStopPingAutostart, tStartPingAutoStart,
tStopPingAutoStart, vPing),
ConstantsPing.PROCESS_NAME_FULL_PONG,
Arrays.asList(aPong, cPing, cPingStatus, sPingStatus, sPing, vPing, vPongStatus));
ConstantsPing.PROCESS_NAME_FULL_PONG, Arrays.asList(aPong, cPing, cPingStatus, cPingUnits, sPingStatus,
sPing, sNetworkSpeedExtension, vPing, vPongStatus, vPingUnits));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package dev.dsf.bpe.listener;

import java.util.List;
import java.util.Objects;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;

import dev.dsf.bpe.ConstantsPing;
import dev.dsf.bpe.spring.config.PingConfig;
import dev.dsf.bpe.v1.ProcessPluginDeploymentStateListener;

public class PingPongDeploymentStateListener implements ProcessPluginDeploymentStateListener, InitializingBean
{
private static final Logger logger = LoggerFactory.getLogger(PingPongDeploymentStateListener.class);

private final PingConfig pingConfig;
private final String networkSpeedUnit;

public PingPongDeploymentStateListener(PingConfig pingConfig)
{
this.pingConfig = pingConfig;
this.networkSpeedUnit = pingConfig.getNetworkSpeedUnit();
}

@Override
public void onProcessesDeployed(List<String> processes)
{
logger.debug("Validating plugin configuration...");
if (ConstantsPing.CODESYSTEM_DSF_PING_UNITS_VALUES.contains(networkSpeedUnit))
{
logger.debug("Network speed unit is valid: {}", networkSpeedUnit);
}
else
{
pingConfig.setNetworkSpeedUnit(ConstantsPing.CODESYSTEM_DSF_PING_UNITS_VALUE_MEGABYTES_PER_SECOND);
logger.debug("Network speed unit \"{}\" is not valid. Valid values are: {}. Defaulting to \"{}\"",
networkSpeedUnit, ConstantsPing.CODESYSTEM_DSF_PING_UNITS_VALUES,
ConstantsPing.CODESYSTEM_DSF_PING_UNITS_VALUE_MEGABYTES_PER_SECOND);
}

// TODO: fixme
int maxDownloadSizeBytes = pingConfig.getMaxDownloadSizeBytes();
int maxDownloadSizeBytesHeapFix = 100000000;
if (maxDownloadSizeBytes > maxDownloadSizeBytesHeapFix)
{
pingConfig.setMaxDownloadSizeBytes(maxDownloadSizeBytesHeapFix);
logger.debug(
"MaxDownloadSizeBytes is too large. Setting maxDownloadSizeBytes to {}. This avoids Java running out of memory and will be fixed in a future release",
maxDownloadSizeBytesHeapFix);
}

int maxUploadSizeBytes = pingConfig.getMaxUploadSizeBytes();
int maxUploadSizeBytesHeapFix = 100000000;
if (maxUploadSizeBytes > maxUploadSizeBytesHeapFix)
{
pingConfig.setMaxUploadSizeBytes(maxUploadSizeBytesHeapFix);
logger.debug(
"MaxUploadSizeBytes is too large. Setting maxUploadSizeBytes to {}. This avoids Java running out of memory and will be fixed in a future release",
maxUploadSizeBytesHeapFix);
}

logger.debug("Configuration validation complete.");
}

@Override
public void afterPropertiesSet() throws Exception
{
Objects.requireNonNull(networkSpeedUnit);
Objects.requireNonNull(pingConfig);
}
}
Loading