|
| 1 | +package com.cp.compiler.services.businesslogic.strategies; |
| 2 | + |
| 3 | +import com.cp.compiler.executions.Execution; |
| 4 | +import com.cp.compiler.models.ExecutionResponse; |
| 5 | +import com.cp.compiler.services.platform.containers.ContainerService; |
| 6 | +import com.cp.compiler.services.platform.resources.Resources; |
| 7 | +import io.micrometer.core.instrument.MeterRegistry; |
| 8 | +import lombok.extern.slf4j.Slf4j; |
| 9 | + |
| 10 | +@Slf4j |
| 11 | +public abstract class ExecutionStrategyDecorator extends ExecutionStrategy { |
| 12 | + |
| 13 | + /** |
| 14 | + * Instantiates a new Execution strategy. |
| 15 | + * |
| 16 | + * @param containerService the container service |
| 17 | + * @param meterRegistry the meter registry |
| 18 | + * @param resources the resources |
| 19 | + */ |
| 20 | + protected ExecutionStrategyDecorator(ContainerService containerService, MeterRegistry meterRegistry, Resources resources) { |
| 21 | + super(containerService, meterRegistry, resources); |
| 22 | + } |
| 23 | + |
| 24 | + @Override |
| 25 | + public ExecutionResponse run(Execution execution, boolean deleteImageAfterExecution) { |
| 26 | + |
| 27 | + long startTime = System.nanoTime(); |
| 28 | + |
| 29 | + var executionResponse = super.run(execution, deleteImageAfterExecution); |
| 30 | + |
| 31 | + long endTime = System.nanoTime(); |
| 32 | + long elapsedTime = endTime - startTime; |
| 33 | + |
| 34 | + // Convert elapsed time to seconds |
| 35 | + double elapsedTimeInMilliSeconds = (double) elapsedTime / 1_000_000; |
| 36 | + log.info("Total execution duration took {} milliseconds", elapsedTimeInMilliSeconds); |
| 37 | + |
| 38 | + // Update last execution time, used to suggest retry in case of a throttling. |
| 39 | + resources.lastExecutionDuration.set(elapsedTimeInMilliSeconds); |
| 40 | + |
| 41 | + return executionResponse; |
| 42 | + } |
| 43 | +} |
0 commit comments