Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / log / SubsystemMap.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #ifndef CEPH_LOG_SUBSYSTEMS
5 #define CEPH_LOG_SUBSYSTEMS
6
7 #include <string>
8 #include <vector>
9
10 #include "include/assert.h"
11
12 namespace ceph {
13 namespace logging {
14
15 struct Subsystem {
16   int log_level, gather_level;
17   std::string name;
18   
19   Subsystem() : log_level(0), gather_level(0) {}     
20 };
21
22 class SubsystemMap {
23   std::vector<Subsystem> m_subsys;
24   unsigned m_max_name_len;
25
26   friend class Log;
27
28 public:
29   SubsystemMap() : m_max_name_len(0) {}
30
31   size_t get_num() const {
32     return m_subsys.size();
33   }
34
35   int get_max_subsys_len() const {
36     return m_max_name_len;
37   }
38
39   void add(unsigned subsys, std::string name, int log, int gather);  
40   void set_log_level(unsigned subsys, int log);
41   void set_gather_level(unsigned subsys, int gather);
42
43   int get_log_level(unsigned subsys) const {
44     if (subsys >= m_subsys.size())
45       subsys = 0;
46     return m_subsys[subsys].log_level;
47   }
48
49   int get_gather_level(unsigned subsys) const {
50     if (subsys >= m_subsys.size())
51       subsys = 0;
52     return m_subsys[subsys].gather_level;
53   }
54
55   const std::string& get_name(unsigned subsys) const {
56     if (subsys >= m_subsys.size())
57       subsys = 0;
58     return m_subsys[subsys].name;
59   }
60
61   bool should_gather(unsigned sub, int level) {
62     assert(sub < m_subsys.size());
63     return level <= m_subsys[sub].gather_level ||
64       level <= m_subsys[sub].log_level;
65   }
66 };
67
68 }
69 }
70
71 #endif