aboutsummaryrefslogtreecommitdiffstats
path: root/lib/common_test/test_server/ts_benchmark.erl
blob: a9486262b3c0fae561cb2d59c0708ad763e542bc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%%     http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%
%% %CopyrightEnd%
%%
-module(ts_benchmark).

-include_lib("common_test/include/ct_event.hrl").
-include_lib("kernel/include/file.hrl").
-include("ts.hrl").

-export([benchmarks/0,
	 run/3]).

%% gen_event callbacks
-export([init/1, handle_event/2]).

benchmarks() ->
    {ok, Cwd} = file:get_cwd(),
    ts_lib:specialized_specs(Cwd,"bench").

run(Specs, Opts, Vars) ->
    {ok, Cwd} = file:get_cwd(),
    {{YY,MM,DD},{HH,Mi,SS}} = calendar:local_time(),
    BName = lists:concat([YY,"_",MM,"_",DD,"T",HH,"_",Mi,"_",SS]),
    BDir = filename:join([Cwd,BName]),
    file:make_dir(BDir),
    [ts_run:run(atom_to_list(Spec),
		[{spec, [atom_to_list(Spec)++"_bench.spec"]}],
		[{event_handler, {ts_benchmark, [Spec,BDir]}}|Opts],Vars) 
     || Spec <- Specs],
    file:delete(filename:join(Cwd,"latest_benchmark")),
    {ok,D} = file:open(filename:join(Cwd,"latest_benchmark"),[write]),
    io:format(D,"~ts", [BDir]),
    file:close(D).
    

%%%===================================================================
%%% gen_event callbacks
%%%===================================================================

-record(state, { spec, suite, tc, stats_dir}).

init([Spec,Dir]) ->
    {ok, #state{ spec = Spec, stats_dir = Dir }}.

handle_event(#event{name = tc_start, data = {Suite,Tc}}, State) ->
    {ok,State#state{ suite = Suite, tc = Tc}};
handle_event(#event{name = benchmark_data, data = Data}, State) ->
    Spec = proplists:get_value(application, Data, State#state.spec),
    Suite = proplists:get_value(suite, Data, State#state.suite),
    Tc = proplists:get_value(name, Data, State#state.tc),
    Value = proplists:get_value(value, Data),
    {ok, D} = file:open(filename:join(
			  [State#state.stats_dir,
			   lists:concat([e(Spec),"-",e(Suite),"-",
					 e(Tc),".ebench"])]),
			[append]),
    io:format(D, "~p~n",[Value]),
    file:close(D),
    {ok, State};
handle_event(_Event, State) ->
    {ok, State}.


e(Atom) when is_atom(Atom) ->
    Atom;
e(Str) when is_list(Str) ->
    lists:map(fun($/) ->
		      $\\;
		 (C) ->
		      C
	      end,Str).