/
xapi_config.ml
121 lines (112 loc) · 3.36 KB
/
xapi_config.ml
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
(*
* Copyright (C) 2006-2009 Citrix Systems Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; version 2.1 only. with the special
* exception on linking described in file LICENSE.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*)
(* Note: this used to be in Helpers; moved due to cyclic dependencies relating to License *)
open Xapi_globs
open Printf
open Stringext
module D=Debug.Debugger(struct let name="xapi" end)
open D
let clear_log level key =
let clear_f =
if key = "" then
Logs.clear_default
else
Logs.clear key in
if level = "" then (
List.iter (fun level -> clear_f level)
[ Log.Error; Log.Warn; Log.Info; Log.Debug ]
) else (
let loglevel = match level with
| "debug" -> Log.Debug
| "info" -> Log.Info
| "warn" -> Log.Warn
| "error" -> Log.Error
| s -> failwith (sprintf "Unknown log level: %s" s) in
clear_f loglevel
)
let append_log level key logger =
(* if key is empty, append to the default logger *)
let append =
if key = "" then
Logs.append_default
else
Logs.append key in
(* if level is empty, append to all level *)
if level = "" then (
List.iter (fun level -> append level logger)
[ Log.Error; Log.Warn; Log.Info; Log.Debug ]
) else (
let loglevel = match level with
| "debug" -> Log.Debug
| "info" -> Log.Info
| "warn" -> Log.Warn
| "error" -> Log.Error
| s -> failwith (sprintf "Unknown log level: %s" s) in
append loglevel logger
)
let read_log_config filename =
let trim_end lc s =
let i = ref (String.length s - 1) in
while !i > 0 && (List.mem s.[!i] lc)
do
decr i
done;
if !i >= 0 then String.sub s 0 (!i + 1) else ""
in
Unixext.readfile_line
(fun line ->
let line = trim_end [ ' '; '\t' ] line in
if String.startswith "#" line then
()
else
let ls = String.split ~limit:3 ';' line in
match ls with
| [ "reset" ] ->
Logs.reset_all []
| [ level; key; "clear" ] ->
clear_log level key
| [ level; key; logger ] ->
append_log level key logger
| _ ->
()
) filename
let read_config filename =
let set_log s =
let ls = String.split ~limit:3 ';' s in
match ls with
| [ level; key; logger ] ->
append_log level key logger
| _ ->
warn "format mismatch: expecting 3 arguments"
in
let configargs = [
(* "license_filename", Config.Set_string License_file.filename; *)
"stunnelng", Config.Set_bool Stunnel.use_new_stunnel;
"log", Config.String set_log;
"gc-debug", Config.Set_bool Xapi_globs.xapi_gc_debug;
] in
try
Config.read filename configargs (fun _ _ -> ())
with Config.Error ls ->
List.iter (fun (p,s) ->
eprintf "config file error: %s: %s\n" p s) ls;
exit 2
let dump_config () =
debug "Server configuration:";
debug "product_version: %s" Version.product_version;
debug "product_brand: %s" Version.product_brand;
debug "build_number: %s" Version.build_number;
debug "git changeset: %s" Version.git_id;
debug "version: %d.%d" version_major version_minor;
(* debug "License filename: %s" !License_file.filename *)