Skip to content

Commit f7e19a1

Browse files
committed
added IWorkerPlugin.stats:NodeStats -> Task<DataSet>
1 parent ee0fa0b commit f7e19a1

File tree

10 files changed

+37
-35
lines changed

10 files changed

+37
-35
lines changed

src/NBomber.Contracts/Contracts.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,15 +148,15 @@ type IReportingSink =
148148
abstract Init: context:IBaseContext * infraConfig:IConfiguration -> Task
149149
abstract Start: unit -> Task
150150
abstract SaveRealtimeStats: stats:ScenarioStats[] -> Task
151-
abstract SaveFinalStats: stats:NodeStats[] -> Task
151+
abstract SaveFinalStats: stats:NodeStats -> Task
152152
abstract Stop: unit -> Task
153153

154154
type IWorkerPlugin =
155155
inherit IDisposable
156156
abstract PluginName: string
157157
abstract Init: context:IBaseContext * infraConfig:IConfiguration -> Task
158158
abstract Start: unit -> Task
159-
abstract GetStats: currentOperation:OperationType -> Task<DataSet>
159+
abstract GetStats: stats:NodeStats -> Task<DataSet>
160160
abstract GetHints: unit -> string[]
161161
abstract Stop: unit -> Task
162162

src/NBomber/Domain/Stats/Statistics.fs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,7 @@ module ScenarioStats =
205205

206206
module NodeStats =
207207

208-
let create (testInfo: TestInfo) (nodeInfo: NodeInfo)
209-
(scnStats: ScenarioStats[]) (pluginStats: DataSet[]) =
208+
let create (testInfo: TestInfo) (nodeInfo: NodeInfo) (scnStats: ScenarioStats[]) =
210209

211210
let maxDuration = scnStats |> Array.maxBy(fun x -> x.Duration) |> fun scn -> scn.Duration
212211

@@ -215,7 +214,7 @@ module NodeStats =
215214
FailCount = scnStats |> Array.sumBy(fun x -> x.FailCount)
216215
AllBytes = scnStats |> Array.sumBy(fun x -> x.AllBytes)
217216
ScenarioStats = scnStats
218-
PluginStats = pluginStats
217+
PluginStats = Array.empty
219218
NodeInfo = nodeInfo
220219
TestInfo = testInfo
221220
ReportFiles = Array.empty

src/NBomber/DomainServices/NBomberRunner.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ let runSession (testInfo: TestInfo) (nodeInfo: NodeInfo) (context: NBomberContex
2727
use testHost = new TestHost(dep, scenarios, Scenario.getStepOrder, RunningStep.execSteps)
2828
let! result = testHost.RunSession(sessionArgs)
2929

30-
let finalStats =
30+
let! finalStats =
3131
Report.build dep.Logger result testHost.TargetScenarios
3232
|> Report.save dep ctx result.FinalStats
3333

src/NBomber/DomainServices/Reports/Report.fs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ let saveToFolder (logger: ILogger, folder: string, fileName: string,
9191
| ex -> logger.Error(ex, "Report.save failed")
9292
Array.empty
9393

94-
let save (dep: IGlobalDependency) (context: NBomberContext) (stats: NodeStats) (report: ReportsContent) =
94+
let save (dep: IGlobalDependency) (context: NBomberContext) (stats: NodeStats) (report: ReportsContent) = backgroundTask {
9595

9696
let fileName = context |> NBomberContext.getReportFileNameOrDefault DateTime.UtcNow
9797
let folder = context |> NBomberContext.getReportFolderOrDefault stats.TestInfo.SessionId
@@ -102,11 +102,11 @@ let save (dep: IGlobalDependency) (context: NBomberContext) (stats: NodeStats) (
102102
if formats.Length > 0 then
103103
let reportFiles = saveToFolder(dep.Logger, folder, fileName, formats, report)
104104
let finalStats = { stats with ReportFiles = reportFiles }
105-
dep.ReportingSinks
106-
|> List.map(fun x -> x.SaveFinalStats [| finalStats |])
107-
|> Task.WhenAll
108-
|> fun t -> t.Wait()
105+
do! dep.ReportingSinks
106+
|> List.map(fun x -> x.SaveFinalStats finalStats)
107+
|> Task.WhenAll
109108

110-
finalStats
109+
return finalStats
111110
else
112-
stats
111+
return stats
112+
}

src/NBomber/DomainServices/TestHost/TestHost.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ type internal TestHost(dep: IGlobalDependency,
129129
do! schedulers |> List.map(fun x -> x.Start isWarmUp) |> Task.WhenAll
130130

131131
// wait on final metrics and reporting tick
132-
do! Task.Delay(Constants.ReportingTimerCompleteMs)
132+
do! Task.Delay Constants.ReportingTimerCompleteMs
133133

134134
flushStatsTimer |> Option.iter(fun x -> x.Stop())
135135
reportingTimer.Stop()

src/NBomber/DomainServices/TestHost/TestHostPlugins.fs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ let getHints (plugins: IWorkerPlugin list) =
4848
)
4949
|> Seq.toList
5050

51-
let getStats (logger: ILogger) (plugins: IWorkerPlugin list) (operation: OperationType) = backgroundTask {
51+
let getStats (logger: ILogger) (plugins: IWorkerPlugin list) (stats: NodeStats) = backgroundTask {
5252
try
5353
let pluginStatusesTask =
5454
plugins
55-
|> List.map(fun plugin -> plugin.GetStats operation)
55+
|> List.map(fun plugin -> plugin.GetStats stats)
5656
|> Task.WhenAll
5757

5858
let! finishedTask = Task.WhenAny(pluginStatusesTask, Task.Delay(Constants.GetPluginStatsTimeout))
@@ -62,7 +62,7 @@ let getStats (logger: ILogger) (plugins: IWorkerPlugin list) (operation: Operati
6262
return Array.empty
6363
with
6464
| ex ->
65-
logger.Error(ex, "Getting plugin stats failed with the following error")
65+
logger.Error("Getting plugin stats failed: {0}", ex.ToString())
6666
return Array.empty
6767
}
6868

src/NBomber/DomainServices/TestHost/TestHostReportingActor.fs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ let getFinalScenarioStats (schedulers: ScenarioScheduler list) =
3434
|> List.map(fun x -> x.GetFinalStats())
3535
|> Task.WhenAll
3636

37-
let getPluginStats (dep: IGlobalDependency) (operation: OperationType) = backgroundTask {
37+
let getPluginStats (dep: IGlobalDependency) (stats: NodeStats) = backgroundTask {
3838
try
3939
let pluginStatusesTask =
4040
dep.WorkerPlugins
41-
|> List.map(fun plugin -> plugin.GetStats operation)
41+
|> List.map(fun plugin -> plugin.GetStats stats)
4242
|> Task.WhenAll
4343

44-
let! finishedTask = Task.WhenAny(pluginStatusesTask, Task.Delay(Constants.GetPluginStatsTimeout))
44+
let! finishedTask = Task.WhenAny(pluginStatusesTask, Task.Delay Constants.GetPluginStatsTimeout)
4545
if finishedTask.Id = pluginStatusesTask.Id then return pluginStatusesTask.Result
4646
else
4747
dep.Logger.Error("Getting plugin stats failed with the timeout error")
@@ -57,12 +57,13 @@ let getFinalStats (dep: IGlobalDependency)
5757
(testInfo: TestInfo)
5858
(nodeInfo: NodeInfo) = backgroundTask {
5959

60-
let pluginStats = getPluginStats dep nodeInfo.CurrentOperation
61-
let scenarioStats = getFinalScenarioStats schedulers
62-
do! Task.WhenAll(pluginStats, scenarioStats)
60+
let! scenarioStats = getFinalScenarioStats schedulers
6361

64-
return if Array.isEmpty scenarioStats.Result then None
65-
else Some(NodeStats.create testInfo nodeInfo scenarioStats.Result pluginStats.Result)
62+
if Array.isEmpty scenarioStats then return None
63+
else
64+
let nodeStats = NodeStats.create testInfo nodeInfo scenarioStats
65+
let! pluginStats = getPluginStats dep nodeStats
66+
return Some { nodeStats with PluginStats = pluginStats }
6667
}
6768

6869
type ActorMessage =
@@ -104,7 +105,7 @@ type TestHostReportingActor(dep: IGlobalDependency, schedulers: ScenarioSchedule
104105
|> TaskOption.map(NodeStats.round >> reply.TrySetResult)
105106
|> Task.WaitAll
106107
with
107-
| ex -> dep.Logger.Error(ex, "TestHostReporting actor failed")
108+
| ex -> dep.Logger.Error("TestHostReporting actor failed: {0}", ex.ToString())
108109
}
109110
:> Task
110111
)

src/NBomber/NBomber.fsproj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
<PackageReference Include="FuncyDown" Version="1.3.0" />
9191
<PackageReference Include="HdrHistogram" Version="2.5.0" />
9292
<PackageReference Include="Json.Net.DataSetConverters" Version="1.1.0" />
93-
<PackageReference Include="NBomber.Contracts" Version="[3.0.0-beta5]" />
93+
<!-- <PackageReference Include="NBomber.Contracts" Version="[3.0.0-beta5]" />-->
9494
<PackageReference Include="Serilog" Version="2.10.0" />
9595
<PackageReference Include="Serilog.Enrichers.Environment" Version="2.2.0" />
9696
<PackageReference Include="Serilog.Enrichers.Thread" Version="3.1.0" />
@@ -109,4 +109,7 @@
109109
<EmbeddedResource Include="Resources\HtmlReport\assets\css\index.css" />
110110
<EmbeddedResource Include="Resources\HtmlReport\index.html" />
111111
</ItemGroup>
112+
<ItemGroup>
113+
<ProjectReference Include="..\NBomber.Contracts\NBomber.Contracts.fsproj" />
114+
</ItemGroup>
112115
</Project>

tests/NBomber.IntegrationTests/Plugins/PluginTests.fs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,8 @@ let ``GetStats should be invoked only one time when final stats fetching`` () =
154154
member _.Init(_, _) = Task.CompletedTask
155155
member _.Start() = Task.CompletedTask
156156

157-
member _.GetStats(operation) =
158-
if operation = OperationType.Complete then
159-
pluginGetStatsInvokedCounter <- pluginGetStatsInvokedCounter + 1
157+
member _.GetStats(stats) =
158+
pluginGetStatsInvokedCounter <- pluginGetStatsInvokedCounter + 1
160159
Task.FromResult(new DataSet())
161160

162161
member _.GetHints() = Array.empty

tests/NBomber.IntegrationTests/StatisticsTests.fs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ module NodeStatsTests =
284284
let scenario2 = { baseScenarioStats with RequestCount = requestCount2 }
285285

286286
let nodeStats =
287-
Statistics.NodeStats.create baseTestInfo baseNodeInfo [| scenario1; scenario2 |] Array.empty
287+
Statistics.NodeStats.create baseTestInfo baseNodeInfo [| scenario1; scenario2 |]
288288

289289
test <@ nodeStats.RequestCount = requestCount1 + requestCount2 @>
290290

@@ -295,7 +295,7 @@ module NodeStatsTests =
295295
let scenario2 = { baseScenarioStats with OkCount = okCount2 }
296296

297297
let nodeStats =
298-
Statistics.NodeStats.create baseTestInfo baseNodeInfo [| scenario1; scenario2 |] Array.empty
298+
Statistics.NodeStats.create baseTestInfo baseNodeInfo [| scenario1; scenario2 |]
299299

300300
test <@ nodeStats.OkCount = okCount1 + okCount2 @>
301301

@@ -306,7 +306,7 @@ module NodeStatsTests =
306306
let scenario2 = { baseScenarioStats with FailCount = failCount2 }
307307

308308
let nodeStats =
309-
Statistics.NodeStats.create baseTestInfo baseNodeInfo [| scenario1; scenario2 |] Array.empty
309+
Statistics.NodeStats.create baseTestInfo baseNodeInfo [| scenario1; scenario2 |]
310310

311311
test <@ nodeStats.FailCount = failCount1 + failCount2 @>
312312

@@ -317,7 +317,7 @@ module NodeStatsTests =
317317
let scenario2 = { baseScenarioStats with AllBytes = allBytes2 }
318318

319319
let nodeStats =
320-
Statistics.NodeStats.create baseTestInfo baseNodeInfo [| scenario1; scenario2 |] Array.empty
320+
Statistics.NodeStats.create baseTestInfo baseNodeInfo [| scenario1; scenario2 |]
321321

322322
test <@ nodeStats.AllBytes = allBytes1 + allBytes2 @>
323323

@@ -327,7 +327,7 @@ module NodeStatsTests =
327327
let scenario2 = { baseScenarioStats with Duration = seconds 20 }
328328

329329
let nodeStats =
330-
Statistics.NodeStats.create baseTestInfo baseNodeInfo [| scenario1; scenario2 |] Array.empty
330+
Statistics.NodeStats.create baseTestInfo baseNodeInfo [| scenario1; scenario2 |]
331331

332332
test <@ nodeStats.Duration = seconds 20 @>
333333

0 commit comments

Comments
 (0)