void loop(){ /* * Check battery status */ do_battery_diagnostics(); /* * Check for danger status (draw or re-charge issues) */ if(has_recharging_error() || is_battery_in_dangerous_state()){ motors_shutdown(); if(is_battery_in_dangerous_state()) set_overload_timeout(); return; } /* * Does the battery need to be recharged? */ if(is_battery_recharing()) return; /* * Now that we pass all those checks, send off control */ switch(control_mode){ case RC: handle_rc(); break; case SERIAL: handle_serial(); break; case I2C: handle_i2c(); break; DEFAULT: motors_shutdown(); } //if(DEBUGGING_ENABLED) debugger(); //delay(loop_delay); }
void k8s_dispatcher::dispatch() { for (list::iterator it = m_messages.begin(); it != m_messages.end();) { if(is_ready(*it)) { Json::Value root; Json::Reader reader; if(reader.parse(*it, root, false)) { std::ostringstream os; msg_data data = get_msg_data(root); if(data.is_valid()) { std::ostringstream os; os << '[' << to_reason_desc(data.m_reason) << ','; switch (m_type) { case k8s_component::K8S_NODES: os << "NODE,"; handle_node(root, data); break; case k8s_component::K8S_NAMESPACES: os << "NAMESPACE,"; handle_namespace(root, data); break; case k8s_component::K8S_PODS: os << "POD,"; handle_pod(root, data); break; case k8s_component::K8S_REPLICATIONCONTROLLERS: os << "REPLICATION_CONTROLLER,"; handle_rc(root, data); break; case k8s_component::K8S_SERVICES: os << "SERVICE,"; handle_service(root, data); break; default: { std::ostringstream eos; eos << "Unknown component: " << static_cast<int>(m_type); throw sinsp_exception(os.str()); } } os << data.m_name << ',' << data.m_uid << ',' << data.m_namespace << ']'; g_logger.log(os.str(), sinsp_logger::SEV_INFO); //g_logger.log(root.toStyledString(), sinsp_logger::SEV_DEBUG); { K8S_LOCK_GUARD_MUTEX; m_state.update_cache(m_type); } } } else { // TODO: bad notification - discard or throw? g_logger.log("Bad JSON message received.", sinsp_logger::SEV_ERROR); } it = m_messages.erase(it); } else { ++it; } } }