void TraceSvcJrd::stopSession(ULONG id) { m_svc.started(); ConfigStorage* storage = TraceManager::getStorage(); StorageGuard guard(storage); storage->restart(); TraceSession session(*getDefaultMemoryPool()); while (storage->getNextSession(session)) { if (id != session.ses_id) continue; if (m_admin || m_user == session.ses_user) { storage->removeSession(id); m_svc.printf(false, "Trace session ID %ld stopped\n", id); } else m_svc.printf(false, "No permissions to stop other user trace session\n"); return; } m_svc.printf(false, "Trace session ID %d not found\n", id); }
void TraceSvcJrd::startSession(TraceSession& session, bool interactive) { if (!TraceManager::pluginsCount()) { m_svc.printf(false, "Can not start trace session. There are no trace plugins loaded\n"); return; } ConfigStorage* storage = TraceManager::getStorage(); { // scope StorageGuard guard(storage); session.ses_auth = m_authBlock; session.ses_user = m_user; MetaName role = m_role; UserId::makeRoleName(role, SQL_DIALECT_V6); session.ses_role = role.c_str(); session.ses_flags = trs_active; if (m_admin) { session.ses_flags |= trs_admin; } if (interactive) { Guid guid; GenerateGuid(&guid); char* buff = session.ses_logfile.getBuffer(GUID_BUFF_SIZE); GuidToString(buff, &guid); session.ses_logfile.insert(0, "fb_trace."); } storage->addSession(session); m_chg_number = storage->getChangeNumber(); } m_svc.started(); m_svc.printf(false, "Trace session ID %ld started\n", session.ses_id); if (interactive) { readSession(session); { StorageGuard guard(storage); storage->removeSession(session.ses_id); } } }