Skip to content

Commit

Permalink
Merge pull request #141 from sentrysoftware/feature/issue-139-add-a-s…
Browse files Browse the repository at this point in the history
…leep-input-to-executeforeachentryof

Issue #139: Add a sleep input to executeForEachEntryOf
  • Loading branch information
NassimBtk committed Mar 29, 2024
2 parents e3b0f09 + c00718c commit ec61649
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import lombok.NoArgsConstructor;
import lombok.NonNull;
import org.sentrysoftware.metricshub.engine.connector.deserializer.custom.NonBlankDeserializer;
import org.sentrysoftware.metricshub.engine.connector.deserializer.custom.PositiveIntegerDeserializer;

/**
* Represents a configuration for executing an operation for each entry of a specified source.
Expand All @@ -62,20 +63,30 @@ public class ExecuteForEachEntryOf implements Serializable {
@JsonSetter(nulls = SKIP)
private IEntryConcatMethod concatMethod = EntryConcatMethod.LIST;

/**
* The sleep integer in ms.
*/
@JsonDeserialize(using = PositiveIntegerDeserializer.class)
@JsonSetter(nulls = SKIP)
private Integer sleep;

/**
* Constructs an instance of {@link ExecuteForEachEntryOf}.
*
* @param source The source for executing the operation for each entry.
* @param concatMethod The method used to concatenate entries.
* @param sleep The sleep integer in ms.
*/
@Builder
@JsonCreator
public ExecuteForEachEntryOf(
@JsonProperty(value = "source", required = true) @NonNull String source,
@JsonProperty("concatMethod") IEntryConcatMethod concatMethod
@JsonProperty("concatMethod") IEntryConcatMethod concatMethod,
@JsonProperty(value = "sleep", required = false) Integer sleep
) {
this.source = source;
this.concatMethod = concatMethod == null ? EntryConcatMethod.LIST : concatMethod;
this.sleep = sleep;
}

/**
Expand All @@ -84,7 +95,7 @@ public ExecuteForEachEntryOf(
* @return A new instance of {@link ExecuteForEachEntryOf} with the same source and concatenation method.
*/
public ExecuteForEachEntryOf copy() {
return ExecuteForEachEntryOf.builder().source(source).concatMethod(concatMethod.copy()).build();
return ExecuteForEachEntryOf.builder().source(source).concatMethod(concatMethod.copy()).sleep(sleep).build();
}

@Override
Expand All @@ -93,6 +104,7 @@ public String toString() {

addNonNull(stringJoiner, "- executeForEachEntryOf=", source);
addNonNull(stringJoiner, "- concatMethod=", concatMethod != null ? concatMethod.getDescription() : EMPTY);
addNonNull(stringJoiner, "- sleep=", sleep);

return stringJoiner.toString();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,4 +188,13 @@ public IEntryConcatMethod getEntryConcatMethod() {
public String getExecuteForEachEntryOf() {
return executeForEachEntryOf != null ? executeForEachEntryOf.getSource() : null;
}

/**
* Get the executeForEachEntryOf sleep Integer value
*
* @return Integer value
*/
public Integer getSleepExecuteForEachEntryOf() {
return executeForEachEntryOf != null ? executeForEachEntryOf.getSleep() : null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -490,6 +490,8 @@ private SourceTable processExecuteForEachEntryOf(final Source source, final Stri

final SourceTable result = SourceTable.builder().rawData(EMPTY).build();

final Integer sleep = source.getSleepExecuteForEachEntryOf();

for (List<String> row : maybeSourceTable.get().getTable()) {
final Source copy = source.copy();

Expand All @@ -505,6 +507,17 @@ private SourceTable processExecuteForEachEntryOf(final Source source, final Stri
copy.update(value -> replaceSourceReference(value, copy));

concatEntryResult(source, result, row, copy.accept(sourceProcessor));
if (sleep != null && sleep != 0) {
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
log.error(
"Hostname {} - Thread interrupted during sleep between two 'execute for each entry' requests.",
hostname
);
Thread.currentThread().interrupt();
}
}
}

return result;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ void testDeserializeHttpSourceWithExecuteForEachEntryOf() throws IOException {
.type("http")
.url("/device-detail/$entry.column(1)$")
.method(GET)
.executeForEachEntryOf(new ExecuteForEachEntryOf("${source::pre.devices}", EntryConcatMethod.LIST))
.executeForEachEntryOf(new ExecuteForEachEntryOf("${source::pre.devices}", EntryConcatMethod.LIST, 0))
.build()
)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,45 @@ void testProcessHTTPSourceCustomExecuteForEachEntry() {
assertEquals(expectedResult, result.getRawData());
}

@Test
void testProcessHTTPSourceExecuteForEachEntrySleep() {
final HttpSource httpSource = HttpSource.builder().url(URL).build();
assertNull(httpSource.getSleepExecuteForEachEntryOf());

httpSource.setExecuteForEachEntryOf(
ExecuteForEachEntryOf.builder().source(ENCLOSURE_COLLECT_SOURCE_1).concatMethod(EntryConcatMethod.LIST).build()
);

assertEquals(null, httpSource.getSleepExecuteForEachEntryOf());

httpSource.setExecuteForEachEntryOf(
ExecuteForEachEntryOf
.builder()
.source(ENCLOSURE_COLLECT_SOURCE_1)
.concatMethod(EntryConcatMethod.LIST)
.sleep(200)
.build()
);

assertEquals(200, httpSource.getSleepExecuteForEachEntryOf());

final CustomConcatMethod customConcatMethod = CustomConcatMethod
.builder()
.concatStart("concatStart:{")
.concatEnd("}concatEnd;")
.build();

httpSource.setExecuteForEachEntryOf(
ExecuteForEachEntryOf
.builder()
.source(ENCLOSURE_COLLECT_SOURCE_1)
.concatMethod(customConcatMethod)
.sleep(400)
.build()
);
assertEquals(400, httpSource.getSleepExecuteForEachEntryOf());
}

@Test
void testProcessSNMPGetSource() {
final SnmpConfiguration snmpConfiguration = SnmpConfiguration.builder().port(161).timeout(120L).build();
Expand Down

0 comments on commit ec61649

Please sign in to comment.