95
105
%%----------------------------------------------------------------------
97
107
display_system_info() ->
98
SysArch = string:strip(erlang:system_info(system_architecture),right,$\n),
99
OtpRel = otp_release(),
100
SysVer = string:strip(erlang:system_info(system_version),right,$\n),
101
SysHT = erlang:system_info(heap_type),
102
SysGHSz = erlang:system_info(global_heaps_size),
103
SysSMP = erlang:system_info(smp_support),
104
SysNumSched = erlang:system_info(schedulers),
105
SysProcLimit = erlang:system_info(process_limit),
106
SysThreads = erlang:system_info(threads),
107
SysTPSz = erlang:system_info(thread_pool_size),
108
SysArch = system_architecture(),
109
OtpRel = otp_release(),
110
SysVer = system_version(),
112
SysGHSz = global_heaps_size(),
113
SysSMP = smp_support(),
114
SysNumSched = schedulers(),
115
SysProcLimit = process_limit(),
116
SysThreads = threads(),
117
SysTPSz = thread_pool_size(),
118
SchedBindings = scheduler_bindings(),
119
SchedBindType = scheduler_bind_type(),
120
CpuTopology = cpu_topology(),
108
121
io:format("System architecture: ~s~n", [SysArch]),
109
122
io:format("OTP release: ~s~n", [OtpRel]),
110
123
io:format("System version: ~s~n", [SysVer]),
111
io:format("Heap type: ~w~n", [SysHT]),
112
io:format("Global heap size: ~w~n", [SysGHSz]),
113
io:format("Thread support: ~w~n", [SysThreads]),
114
io:format("Thread pool size: ~w~n", [SysTPSz]),
115
io:format("SMP support: ~w~n", [SysSMP]),
116
io:format("Num schedulers: ~w~n", [SysNumSched]),
117
io:format("Process limit: ~w~n", [SysProcLimit]),
124
io:format("Heap type: ~s~n", [SysHT]),
125
io:format("Global heap size: ~s~n", [SysGHSz]),
126
io:format("Thread support: ~s~n", [SysThreads]),
127
io:format("Thread pool size: ~s~n", [SysTPSz]),
128
io:format("Process limit: ~s~n", [SysProcLimit]),
129
io:format("SMP support: ~s~n", [SysSMP]),
130
io:format("Num schedulers: ~s~n", [SysNumSched]),
131
io:format("Scheduler bindings: ~s~n", [SchedBindings]),
132
io:format("Scheduler bind type: ~s~n", [SchedBindType]),
133
io:format("Cpu topology: ~s~n", [CpuTopology]),
137
system_architecture() ->
138
string:strip(system_info(system_architecture, string),right,$\n).
122
case (catch erlang:system_info(otp_release)) of
141
system_info(otp_release, string).
144
string:strip(system_info(system_version, string),right,$\n).
147
system_info(heap_type, any).
149
global_heaps_size() ->
150
system_info(global_heaps_size, any).
153
system_info(smp_support, any).
156
system_info(schedulers, any).
159
system_info(process_limit, any).
162
system_info(threads, any).
164
thread_pool_size() ->
165
system_info(thread_pool_size, any).
167
scheduler_bindings() ->
168
system_info(scheduler_bindings, any).
170
scheduler_bind_type() ->
171
system_info(scheduler_bind_type, any).
174
system_info(cpu_topology, any).
176
system_info(Tag, Type) ->
177
case (catch erlang:system_info(Tag)) of
180
Info when is_list(Info) andalso (Type =:= string) ->
183
lists:flatten(io_lib:format("~w", [Info]))
130
188
%%----------------------------------------------------------------------
132
190
%% D i s p l a y A l l o c a t o r I n f o
240
298
%%----------------------------------------------------------------------
242
%% E x p a n d D i r s
244
%%----------------------------------------------------------------------
246
expand_dirs(Dirs, DrvInclude) ->
247
expand_dirs(Dirs, DrvInclude, []).
249
expand_dirs([], _, EDirs) ->
250
lists:reverse(lists:flatten(EDirs));
251
expand_dirs([Dir|Dirs], DrvInclude, EDirs) when is_atom(Dir) ->
252
EDir = expand_dir(atom_to_list(Dir), DrvInclude),
253
expand_dirs(Dirs, DrvInclude, [EDir|EDirs]);
254
expand_dirs([Dir|Dirs], DrvInclude, EDirs) when is_list(Dir) ->
255
EDir = expand_dir(Dir, DrvInclude),
256
expand_dirs(Dirs, DrvInclude, [EDir|EDirs]).
258
expand_dir(Dir, flex) ->
261
[{Dir, megaco_pretty_text_encoder, [flex_scanner]},
262
{Dir, megaco_pretty_text_encoder, [flex_scanner]},
263
{Dir, megaco_pretty_text_encoder, [flex_scanner]},
264
{Dir, megaco_pretty_text_encoder, [flex_scanner]},
265
{Dir, megaco_pretty_text_encoder, [flex_scanner]},
266
{Dir, megaco_pretty_text_encoder, [flex_scanner]},
267
{Dir, megaco_pretty_text_encoder, [flex_scanner]},
268
{Dir, megaco_pretty_text_encoder, [flex_scanner]}];
270
[{Dir, megaco_compact_text_encoder, [flex_scanner]},
271
{Dir, megaco_compact_text_encoder, [flex_scanner]},
272
{Dir, megaco_compact_text_encoder, [flex_scanner]},
273
{Dir, megaco_compact_text_encoder, [flex_scanner]},
274
{Dir, megaco_compact_text_encoder, [flex_scanner]},
275
{Dir, megaco_compact_text_encoder, [flex_scanner]},
276
{Dir, megaco_compact_text_encoder, [flex_scanner]},
277
{Dir, megaco_compact_text_encoder, [flex_scanner]}];
285
error({invalid_codec, Else})
287
expand_dir(Dir, only_drv) ->
290
[{Dir, megaco_pretty_text_encoder, [flex_scanner]},
291
{Dir, megaco_pretty_text_encoder, [flex_scanner]}];
293
[{Dir, megaco_compact_text_encoder, [flex_scanner]},
294
{Dir, megaco_compact_text_encoder, [flex_scanner]}];
296
[{Dir, megaco_ber_bin_encoder, [driver,native]},
297
{Dir, megaco_ber_bin_encoder, [driver]},
298
{Dir, megaco_ber_bin_encoder, [driver,native]},
299
{Dir, megaco_ber_bin_encoder, [driver]}];
301
[{Dir, megaco_per_bin_encoder, [driver,native]},
302
{Dir, megaco_per_bin_encoder, [native]},
303
{Dir, megaco_per_bin_encoder, [driver,native]},
304
{Dir, megaco_per_bin_encoder, [native]}];
306
Encoder = megaco_erl_dist_encoder,
308
{Dir, Encoder, [megaco_compressed,compressed]},
309
{Dir, Encoder, [compressed]},
310
{Dir, Encoder, [megaco_compressed,compressed]},
311
{Dir, Encoder, [compressed]}
314
error({invalid_codec, Else})
316
expand_dir(Dir, no_drv) ->
319
[{Dir, megaco_pretty_text_encoder, []},
320
{Dir, megaco_pretty_text_encoder, []}];
322
[{Dir, megaco_compact_text_encoder, []},
323
{Dir, megaco_compact_text_encoder, []}];
325
[{Dir, megaco_ber_bin_encoder, [native]},
326
{Dir, megaco_ber_bin_encoder, []},
327
{Dir, megaco_ber_bin_encoder, [native]},
328
{Dir, megaco_ber_bin_encoder, []}];
330
[{Dir, megaco_per_bin_encoder, [native]},
331
{Dir, megaco_per_bin_encoder, []},
332
{Dir, megaco_per_bin_encoder, [native]},
333
{Dir, megaco_per_bin_encoder, []}];
335
Encoder = megaco_erl_dist_encoder,
337
{Dir, Encoder, [megaco_compressed]},
339
{Dir, Encoder, [megaco_compressed]},
343
error({invalid_codec, Else})
345
expand_dir(Dir, _) ->
348
[{Dir, megaco_pretty_text_encoder, [flex_scanner]},
349
{Dir, megaco_pretty_text_encoder, []}];
351
[{Dir, megaco_compact_text_encoder, [flex_scanner]},
352
{Dir, megaco_compact_text_encoder, []}];
354
[{Dir, megaco_ber_bin_encoder, [driver,native]},
355
{Dir, megaco_ber_bin_encoder, [native]},
356
{Dir, megaco_ber_bin_encoder, [driver]},
357
{Dir, megaco_ber_bin_encoder, []}];
359
[{Dir, megaco_per_bin_encoder, [driver,native]},
360
{Dir, megaco_per_bin_encoder, [native]},
361
{Dir, megaco_per_bin_encoder, [driver]},
362
{Dir, megaco_per_bin_encoder, []}];
364
Encoder = megaco_erl_dist_encoder,
366
{Dir, Encoder, [megaco_compressed,compressed]},
367
{Dir, Encoder, [compressed]},
368
{Dir, Encoder, [megaco_compressed]},
372
error({invalid_codec, Else})
376
%%----------------------------------------------------------------------
378
%% R e a d M e s s a g e s
380
%%----------------------------------------------------------------------
382
read_messages(Dir) ->
383
[read_message(Dir, File) || File <- read_files(Dir)].
385
read_message(Dir, FileName) ->
386
File = filename:join([Dir, FileName]),
387
case file:read_file_info(File) of
388
{ok, #file_info{size = Sz, type = regular}} when Sz > 0 ->
389
case file:read_file(File) of
393
error({failed_reading_file, Error})
396
{ok, #file_info{type = regular}} ->
397
error({file_empty, FileName});
399
{ok, #file_info{type = Type}} ->
400
error({invalid_type, FileName, Type});
403
error({unexpected_file_info, FileName, Info});
406
error({failed_reading_file_info, File, Error})
412
case file:list_dir(Dir) of
416
error({failed_listing_dir, Dir, Error})
300
%% E x p a n d M e s s a g e s
302
%%----------------------------------------------------------------------
304
expanded_messages(Codecs, DrvInclude) ->
305
MessagePackage = time_test,
306
expanded_messages(MessagePackage, Codecs, DrvInclude).
308
expanded_messages(MessagePackage, Codecs, DrvInclude) ->
309
ECodecs = expand_codecs(Codecs, DrvInclude),
310
Messages = megaco_codec_transform:messages(MessagePackage),
311
expanded_messages2(ECodecs, Messages, []).
313
expanded_messages2([], _Messages, EMessages) ->
314
lists:reverse(EMessages);
315
expanded_messages2([{Codec, Mod, Conf}|ECodecs], Messages, EMessages) ->
316
case lists:keysearch(Codec, 1, Messages) of
317
{value, {Codec, Msgs}} ->
318
expanded_messages2(ECodecs, Messages,
319
[{Codec, Mod, Conf, Msgs}|EMessages]);
321
exit({error, {no_such_codec_data, Codec}})
325
%%----------------------------------------------------------------------
327
%% E x p a n d C o d e c s
329
%%----------------------------------------------------------------------
331
expand_codecs(Codecs, DrvInclude) ->
332
expand_codecs(Codecs, DrvInclude, []).
334
expand_codecs([], _, ECodecs) ->
335
lists:reverse(lists:flatten(ECodecs));
336
expand_codecs([Codec|Codecs], DrvInclude, ECodecs) when is_atom(Codec) ->
337
ECodec = expand_codec(Codec, DrvInclude),
338
expand_codecs(Codecs, DrvInclude, [ECodec|ECodecs]).
340
expand_codec(Codec, flex) ->
343
[{Codec, megaco_pretty_text_encoder, [flex_scanner]},
344
{Codec, megaco_pretty_text_encoder, [flex_scanner]},
345
{Codec, megaco_pretty_text_encoder, [flex_scanner]},
346
{Codec, megaco_pretty_text_encoder, [flex_scanner]},
347
{Codec, megaco_pretty_text_encoder, [flex_scanner]},
348
{Codec, megaco_pretty_text_encoder, [flex_scanner]},
349
{Codec, megaco_pretty_text_encoder, [flex_scanner]},
350
{Codec, megaco_pretty_text_encoder, [flex_scanner]}];
352
[{Codec, megaco_compact_text_encoder, [flex_scanner]},
353
{Codec, megaco_compact_text_encoder, [flex_scanner]},
354
{Codec, megaco_compact_text_encoder, [flex_scanner]},
355
{Codec, megaco_compact_text_encoder, [flex_scanner]},
356
{Codec, megaco_compact_text_encoder, [flex_scanner]},
357
{Codec, megaco_compact_text_encoder, [flex_scanner]},
358
{Codec, megaco_compact_text_encoder, [flex_scanner]},
359
{Codec, megaco_compact_text_encoder, [flex_scanner]}];
367
error({invalid_codec, Else})
369
expand_codec(Codec, only_drv) ->
372
[{Codec, megaco_pretty_text_encoder, [flex_scanner]},
373
{Codec, megaco_pretty_text_encoder, [flex_scanner]}];
375
[{Codec, megaco_compact_text_encoder, [flex_scanner]},
376
{Codec, megaco_compact_text_encoder, [flex_scanner]}];
378
[{Codec, megaco_ber_bin_encoder, [driver,native]},
379
{Codec, megaco_ber_bin_encoder, [driver]},
380
{Codec, megaco_ber_bin_encoder, [driver,native]},
381
{Codec, megaco_ber_bin_encoder, [driver]}];
383
[{Codec, megaco_per_bin_encoder, [driver,native]},
384
{Codec, megaco_per_bin_encoder, [native]},
385
{Codec, megaco_per_bin_encoder, [driver,native]},
386
{Codec, megaco_per_bin_encoder, [native]}];
388
Encoder = megaco_erl_dist_encoder,
390
{Codec, Encoder, [megaco_compressed,compressed]},
391
{Codec, Encoder, [compressed]},
392
{Codec, Encoder, [megaco_compressed,compressed]},
393
{Codec, Encoder, [compressed]}
396
error({invalid_codec, Else})
398
expand_codec(Codec, no_drv) ->
401
[{Codec, megaco_pretty_text_encoder, []},
402
{Codec, megaco_pretty_text_encoder, []}];
404
[{Codec, megaco_compact_text_encoder, []},
405
{Codec, megaco_compact_text_encoder, []}];
407
[{Codec, megaco_ber_bin_encoder, [native]},
408
{Codec, megaco_ber_bin_encoder, []},
409
{Codec, megaco_ber_bin_encoder, [native]},
410
{Codec, megaco_ber_bin_encoder, []}];
412
[{Codec, megaco_per_bin_encoder, [native]},
413
{Codec, megaco_per_bin_encoder, []},
414
{Codec, megaco_per_bin_encoder, [native]},
415
{Codec, megaco_per_bin_encoder, []}];
417
Encoder = megaco_erl_dist_encoder,
419
{Codec, Encoder, [megaco_compressed]},
420
{Codec, Encoder, []},
421
{Codec, Encoder, [megaco_compressed]},
425
error({invalid_codec, Else})
427
expand_codec(Codec, _) ->
430
[{Codec, megaco_pretty_text_encoder, [flex_scanner]},
431
{Codec, megaco_pretty_text_encoder, []}];
433
[{Codec, megaco_compact_text_encoder, [flex_scanner]},
434
{Codec, megaco_compact_text_encoder, []}];
436
[{Codec, megaco_ber_bin_encoder, [driver,native]},
437
{Codec, megaco_ber_bin_encoder, [native]},
438
{Codec, megaco_ber_bin_encoder, [driver]},
439
{Codec, megaco_ber_bin_encoder, []}];
441
[{Codec, megaco_per_bin_encoder, [driver,native]},
442
{Codec, megaco_per_bin_encoder, [native]},
443
{Codec, megaco_per_bin_encoder, [driver]},
444
{Codec, megaco_per_bin_encoder, []}];
446
Encoder = megaco_erl_dist_encoder,
448
{Codec, Encoder, [megaco_compressed,compressed]},
449
{Codec, Encoder, [compressed]},
450
{Codec, Encoder, [megaco_compressed]},
454
error({invalid_codec, Else})