// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "../zen.h" namespace zen { class SessionsSubCmdBase : public ZenSubCmdBase { public: SessionsSubCmdBase(std::string_view Name, std::string_view Description); protected: std::string m_HostName; }; class SessionsLsSubCmd : public SessionsSubCmdBase { public: SessionsLsSubCmd(); void Run(const ZenCliOptions& GlobalOptions) override; private: std::string m_StatusFilter = "all"; // "active", "ended", "all" }; class SessionsStatusSubCmd : public SessionsSubCmdBase { public: SessionsStatusSubCmd(); void Run(const ZenCliOptions& GlobalOptions) override; }; class SessionsTailSubCmd : public SessionsSubCmdBase { public: SessionsTailSubCmd(); void Run(const ZenCliOptions& GlobalOptions) override; private: std::string m_SessionId; // optional positional; empty = self uint32_t m_Lines = 50; bool m_Follow = false; uint32_t m_PollIntervalMs = 500; }; class SessionsUiSubCmd : public SessionsSubCmdBase { public: SessionsUiSubCmd(); void Run(const ZenCliOptions& GlobalOptions) override; }; class SessionsCommand : public ZenCmdWithSubCommands { public: static constexpr char Name[] = "sessions"; static constexpr char Description[] = "Inspect zen client sessions - ls, status, tail, ui"; SessionsCommand(); ~SessionsCommand(); cxxopts::Options& Options() override { return m_Options; } private: cxxopts::Options m_Options{Name, Description}; SessionsLsSubCmd m_LsSubCmd; SessionsStatusSubCmd m_StatusSubCmd; SessionsTailSubCmd m_TailSubCmd; SessionsUiSubCmd m_UiSubCmd; }; } // namespace zen