X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ce471ed7ea3fdadc8301024a64103c33332725a1..bdaff2753e3c9371e8122ffaf0694581b458d80d:/src/plugins/link_energy.cpp diff --git a/src/plugins/link_energy.cpp b/src/plugins/link_energy.cpp index 2f42d3eee1..a0b7cd413f 100644 --- a/src/plugins/link_energy.cpp +++ b/src/plugins/link_energy.cpp @@ -6,11 +6,14 @@ #include "simgrid/plugins/energy.h" #include "simgrid/s4u/Engine.hpp" #include "src/surf/network_interface.hpp" +#include "src/surf/surf_interface.hpp" #include "surf/surf.hpp" #include #include +SIMGRID_REGISTER_PLUGIN(link_energy, "Link energy consumption.", &sg_link_energy_plugin_init) + /** @addtogroup SURF_plugin_energy @@ -100,14 +103,18 @@ void LinkEnergy::init_watts_range_list() /* min_power corresponds to the idle power (link load = 0) */ /* max_power is the power consumed at 100% link load */ - char* idleMsg = bprintf("Invalid idle power value for link%s", this->link_->get_cname()); - char* busyMsg = bprintf("Invalid busy power value for %s", this->link_->get_cname()); + try { + idle_ = std::stod(current_power_values.front()); + } catch (std::invalid_argument& ia) { + throw std::invalid_argument(std::string("Invalid idle power value for link ") + this->link_->get_cname()); + } - idle_ = xbt_str_parse_double((current_power_values.at(0)).c_str(), idleMsg); - busy_ = xbt_str_parse_double((current_power_values.at(1)).c_str(), busyMsg); + try { + busy_ = std::stod(current_power_values.back()); + } catch (std::invalid_argument& ia) { + throw std::invalid_argument(std::string("Invalid busy power value for link ") + this->link_->get_cname()); + } - xbt_free(idleMsg); - xbt_free(busyMsg); update(); } } @@ -195,12 +202,13 @@ void sg_link_energy_plugin_init() link.extension()->get_consumed_energy()); }); - simgrid::s4u::Link::on_communication_state_change.connect([](simgrid::kernel::resource::NetworkAction* action) { - for (simgrid::kernel::resource::LinkImpl* link : action->links()) { - if (link != nullptr) - link->piface_.extension()->update(); - } - }); + simgrid::s4u::Link::on_communication_state_change.connect( + [](simgrid::kernel::resource::NetworkAction* action, simgrid::kernel::resource::Action::State /* previous */) { + for (simgrid::kernel::resource::LinkImpl* link : action->links()) { + if (link != nullptr) + link->piface_.extension()->update(); + } + }); simgrid::s4u::Link::on_communicate.connect(&on_communicate); simgrid::s4u::on_simulation_end.connect(&on_simulation_end);