@@ -188,48 +188,40 @@ void on_connect(uv_connect_t* connection, int status)
188188 state.tracingFlags = tracingFlags;
189189 });
190190
191- client->observe (" /log-streams" , [ref = context->ref ](std::string_view cmd) {
192- auto & state = ref.get <DeviceState>();
193- static constexpr int prefixSize = std::string_view{" /log-streams " }.size ();
194- if (prefixSize > cmd.size ()) {
195- LOG (error) << " Malformed log-streams request" ;
191+ client->observe (" /signpost:enable" , [](std::string_view cmd) {
192+ static constexpr int prefixSize = std::string_view{" /signpost:enable " }.size ();
193+ if (cmd.size () <= prefixSize) {
194+ LOG (error) << " Malformed /signpost:enable request" ;
196195 return ;
197196 }
198- cmd.remove_prefix (prefixSize);
199- int logStreams = 0 ;
197+ std::string name (cmd.substr (prefixSize));
198+ o2_walk_logs ([](char const * logName, void * l, void * context) -> bool {
199+ auto * log = static_cast <_o2_log_t *>(l);
200+ auto * target = static_cast <std::string*>(context);
201+ if (*target == logName) {
202+ _o2_log_set_stacktrace (log, log->defaultStacktrace );
203+ return false ;
204+ }
205+ return true ;
206+ }, &name);
207+ });
200208
201- auto error = std::from_chars (cmd.data (), cmd.data () + cmd.size (), logStreams);
202- if (error.ec != std::errc ()) {
203- LOG (error) << " Malformed log-streams mask" ;
209+ client->observe (" /signpost:disable" , [](std::string_view cmd) {
210+ static constexpr int prefixSize = std::string_view{" /signpost:disable " }.size ();
211+ if (cmd.size () <= prefixSize) {
212+ LOG (error) << " Malformed /signpost:disable request" ;
204213 return ;
205214 }
206- LOGP (info, " Logstreams flags set to {}" , logStreams);
207- state.logStreams = logStreams;
208- if ((state.logStreams & DeviceState::LogStreams::DEVICE_LOG) != 0 ) {
209- O2_LOG_ENABLE (device);
210- } else {
211- O2_LOG_DISABLE (device);
212- }
213- if ((state.logStreams & DeviceState::LogStreams::COMPLETION_LOG) != 0 ) {
214- O2_LOG_ENABLE (completion);
215- } else {
216- O2_LOG_DISABLE (completion);
217- }
218- if ((state.logStreams & DeviceState::LogStreams::MONITORING_SERVICE_LOG) != 0 ) {
219- O2_LOG_ENABLE (monitoring_service);
220- } else {
221- O2_LOG_DISABLE (monitoring_service);
222- }
223- if ((state.logStreams & DeviceState::LogStreams::DATA_PROCESSOR_CONTEXT_LOG) != 0 ) {
224- O2_LOG_ENABLE (data_processor_context);
225- } else {
226- O2_LOG_DISABLE (data_processor_context);
227- }
228- if ((state.logStreams & DeviceState::LogStreams::STREAM_CONTEXT_LOG) != 0 ) {
229- O2_LOG_ENABLE (stream_context);
230- } else {
231- O2_LOG_DISABLE (stream_context);
232- }
215+ std::string name (cmd.substr (prefixSize));
216+ o2_walk_logs ([](char const * logName, void * l, void * context) -> bool {
217+ auto * log = static_cast <_o2_log_t *>(l);
218+ auto * target = static_cast <std::string*>(context);
219+ if (*target == logName) {
220+ _o2_log_set_stacktrace (log, 0 );
221+ return false ;
222+ }
223+ return true ;
224+ }, &name);
233225 });
234226
235227 // Client will be filled in the line after. I can probably have a single
0 commit comments