Skip to content

Commit 84adaf7

Browse files
authored
Merge pull request #95 from polycube-network/pr/fix_services_logging
fix logging in services
2 parents a3f8dab + 898035b commit 84adaf7

9 files changed

Lines changed: 42 additions & 10 deletions

File tree

src/libs/polycube/include/polycube/services/base_cube.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ class BaseCube {
9393

9494
protected:
9595
int get_table_fd(const std::string &table_name, int index, ProgramType type);
96+
void set_control_plane_log_level(LogLevel level);
9697

9798
std::shared_ptr<BaseCubeIface> cube_; // pointer to the cube in polycubed
9899
log_msg_cb handle_log_msg;

src/libs/polycube/include/polycube/services/cube.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,10 @@ Cube<PortType>::Cube(const nlohmann::json &conf,
8686
packet_in(p, md_, packet);
8787
};
8888

89-
cube_ = factory_->create_cube(conf, ingress_code, egress_code, handle_log_msg,
90-
handle_packet_in);
89+
cube_ = factory_->create_cube(
90+
conf, ingress_code, egress_code, handle_log_msg,
91+
std::bind(&Cube::set_control_plane_log_level, this, std::placeholders::_1),
92+
handle_packet_in);
9193
// TODO: where to keep this reference?, keep a double reference?
9294
BaseCube::cube_ = cube_;
9395
}

src/libs/polycube/include/polycube/services/cube_factory.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,17 +63,21 @@ typedef std::function<void(const LogMsg *msg)> log_msg_cb;
6363

6464
typedef std::function<void(void)> attach_cb;
6565

66+
typedef std::function<void(LogLevel level)> set_log_level_cb;
67+
6668
class CubeFactory {
6769
public:
6870
virtual std::shared_ptr<CubeIface> create_cube(
6971
const nlohmann::json &conf, const std::vector<std::string> &ingress_code,
7072
const std::vector<std::string> &egress_code, const log_msg_cb &log_msg,
73+
const set_log_level_cb &log_level_cb,
7174
const packet_in_cb &cb = empty_packet_in_cb) = 0;
7275

7376
virtual std::shared_ptr<TransparentCubeIface> create_transparent_cube(
7477
const nlohmann::json &conf, const std::vector<std::string> &ingress_code,
7578
const std::vector<std::string> &egress_code, const log_msg_cb &log_msg,
76-
const packet_in_cb &cb, const attach_cb &attach) = 0;
79+
const set_log_level_cb &log_level_cb, const packet_in_cb &cb,
80+
const attach_cb &attach) = 0;
7781

7882
virtual void destroy_cube(const std::string &name) = 0;
7983
};

src/libs/polycube/src/base_cube.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,12 @@ void BaseCube::datapath_log_msg(const LogMsg *msg) {
9191
}
9292

9393
void BaseCube::set_log_level(LogLevel level) {
94+
set_control_plane_log_level(level);
95+
cube_->set_log_level(level);
96+
}
97+
98+
void BaseCube::set_control_plane_log_level(LogLevel level) {
9499
logger()->set_level(logLevelToSPDLog(level));
95-
return cube_->set_log_level(level);
96100
}
97101

98102
LogLevel BaseCube::get_log_level() const {

src/libs/polycube/src/transparent_cube.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,10 @@ TransparentCube::TransparentCube(const nlohmann::json &conf,
4343
};
4444

4545
cube_ = factory_->create_transparent_cube(
46-
conf, ingress_code, egress_code, handle_log_msg, handle_packet_in,
47-
std::bind(&TransparentCube::attach, this));
46+
conf, ingress_code, egress_code, handle_log_msg,
47+
std::bind(&TransparentCube::set_control_plane_log_level, this,
48+
std::placeholders::_1),
49+
handle_packet_in, std::bind(&TransparentCube::attach, this));
4850
// TODO: where to keep this reference?, keep a double reference?
4951
BaseCube::cube_ = cube_;
5052
}

src/polycubed/src/base_cube.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,9 @@ void BaseCube::set_log_level(LogLevel level) {
357357
if (level_ == level)
358358
return;
359359

360+
// change log level in dataplane
361+
log_level_cb_(level);
362+
360363
level_ = level;
361364
reload_all();
362365
}
@@ -365,6 +368,10 @@ LogLevel BaseCube::get_log_level() const {
365368
return level_;
366369
}
367370

371+
void BaseCube::set_log_level_cb(const polycube::service::set_log_level_cb &cb) {
372+
log_level_cb_ = cb;
373+
}
374+
368375
void BaseCube::set_conf(const nlohmann::json &conf) {
369376
if (conf.count("loglevel")) {
370377
set_log_level(stringLogLevel(conf.at("loglevel").get<std::string>()));

src/polycubed/src/base_cube.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "bcc_mutex.h"
2020
#include "id_generator.h"
2121
#include "patchpanel.h"
22+
#include "polycube/services/cube_factory.h"
2223
#include "polycube/services/cube_iface.h"
2324
#include "polycube/services/guid.h"
2425
#include "polycube/services/json.hpp"
@@ -82,6 +83,8 @@ class BaseCube : virtual public BaseCubeIface {
8283
void set_conf(const nlohmann::json &conf);
8384
virtual nlohmann::json to_json() const;
8485

86+
void set_log_level_cb(const polycube::service::set_log_level_cb &cb);
87+
8588
protected:
8689
static const int _POLYCUBE_MAX_BPF_PROGRAMS = 64;
8790
static const int _POLYCUBE_MAX_PORTS = 128;
@@ -136,6 +139,8 @@ class BaseCube : virtual public BaseCubeIface {
136139

137140
void do_reload(const std::string &code, int index, ProgramType type);
138141
static IDGenerator id_generator_;
142+
143+
polycube::service::set_log_level_cb log_level_cb_;
139144
};
140145

141146
} // namespace polycubed

src/polycubed/src/cube_factory_impl.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,15 @@ CubeFactoryImpl::CubeFactoryImpl(const std::string &service_name)
3939
std::shared_ptr<CubeIface> CubeFactoryImpl::create_cube(
4040
const nlohmann::json &conf, const std::vector<std::string> &ingress_code,
4141
const std::vector<std::string> &egress_code, const log_msg_cb &log_msg,
42-
const packet_in_cb &cb) {
42+
const set_log_level_cb &log_level_cb, const packet_in_cb &cb) {
4343
auto name = conf.at("name").get<std::string>();
4444
auto type = string_to_cube_type(conf.at("type").get<std::string>());
4545
auto level = stringLogLevel(conf.at("loglevel").get<std::string>());
4646

4747
auto cube =
4848
create_cube(name, ingress_code, egress_code, log_msg, type, cb, level);
49+
auto base = std::dynamic_pointer_cast<BaseCube>(cube);
50+
base->set_log_level_cb(log_level_cb);
4951
return std::move(cube);
5052
}
5153

@@ -96,13 +98,16 @@ std::shared_ptr<CubeIface> CubeFactoryImpl::create_cube(
9698
std::shared_ptr<TransparentCubeIface> CubeFactoryImpl::create_transparent_cube(
9799
const nlohmann::json &conf, const std::vector<std::string> &ingress_code,
98100
const std::vector<std::string> &egress_code, const log_msg_cb &log_msg,
99-
const packet_in_cb &cb, const attach_cb &attach) {
101+
const set_log_level_cb &log_level_cb, const packet_in_cb &cb,
102+
const attach_cb &attach) {
100103
auto name = conf.at("name").get<std::string>();
101104
auto type = string_to_cube_type(conf.at("type").get<std::string>());
102105
auto level = stringLogLevel(conf.at("loglevel").get<std::string>());
103106

104107
auto cube = create_transparent_cube(name, ingress_code, egress_code, log_msg,
105108
type, cb, attach, level);
109+
auto base = std::dynamic_pointer_cast<BaseCube>(cube);
110+
base->set_log_level_cb(log_level_cb);
106111
return std::move(cube);
107112
}
108113

src/polycubed/src/cube_factory_impl.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ using service::TransparentCubeIface;
3434
using service::CubeFactory;
3535
using service::packet_in_cb;
3636
using service::log_msg_cb;
37+
using service::set_log_level_cb;
3738
using service::attach_cb;
3839

3940
class CubeFactoryImpl : public CubeFactory {
@@ -44,12 +45,13 @@ class CubeFactoryImpl : public CubeFactory {
4445
std::shared_ptr<CubeIface> create_cube(
4546
const nlohmann::json &conf, const std::vector<std::string> &ingress_code,
4647
const std::vector<std::string> &egress_code, const log_msg_cb &log_msg,
47-
const packet_in_cb &cb) override;
48+
const set_log_level_cb &log_level_cb, const packet_in_cb &cb) override;
4849

4950
std::shared_ptr<TransparentCubeIface> create_transparent_cube(
5051
const nlohmann::json &conf, const std::vector<std::string> &ingress_code,
5152
const std::vector<std::string> &egress_code, const log_msg_cb &log_msg,
52-
const packet_in_cb &cb, const attach_cb &attach) override;
53+
const set_log_level_cb &log_level_cb, const packet_in_cb &cb,
54+
const attach_cb &attach) override;
5355

5456
void destroy_cube(const std::string &name) override;
5557

0 commit comments

Comments
 (0)