Beispiel #1
0
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);

}
Beispiel #2
0
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;
		}
	}
}