节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
696.00 B
Stardust
// SPDX-License-Identifier: MIT
#pragma once

#include "protocol.hpp"

#include <mutex>
#include <string>
#include <vector>

namespace staragent {

// Bounded event queue persisted to JSON so events survive restarts.
class EventQueue
{
public:
    EventQueue(std::string path, std::size_t max_events = 1000);

    void Add(const EventModel& event);
    std::vector<EventModel> Take(std::size_t count);
    void PutFront(const std::vector<EventModel>& events);
    std::size_t Size() const;

private:
    void SaveLocked();
    void TrimLocked();

    mutable std::mutex mutex_;
    std::string path_;
    std::size_t max_events_;
    std::vector<EventModel> events_;
};

} // namespace staragent