feat: implement /subz endpoint with account filter, test subject, and pagination
This commit is contained in:
@@ -33,6 +33,62 @@ public sealed class SubList : IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns all subscriptions in the trie. For monitoring only.
|
||||
/// </summary>
|
||||
public List<Subscription> GetAllSubscriptions()
|
||||
{
|
||||
_lock.EnterReadLock();
|
||||
try
|
||||
{
|
||||
var result = new List<Subscription>();
|
||||
CollectAll(_root, result);
|
||||
return result;
|
||||
}
|
||||
finally
|
||||
{
|
||||
_lock.ExitReadLock();
|
||||
}
|
||||
}
|
||||
|
||||
private static void CollectAll(TrieLevel level, List<Subscription> result)
|
||||
{
|
||||
foreach (var (_, node) in level.Nodes)
|
||||
{
|
||||
foreach (var sub in node.PlainSubs) result.Add(sub);
|
||||
foreach (var (_, qset) in node.QueueSubs)
|
||||
foreach (var sub in qset) result.Add(sub);
|
||||
if (node.Next != null) CollectAll(node.Next, result);
|
||||
}
|
||||
if (level.Pwc != null)
|
||||
{
|
||||
foreach (var sub in level.Pwc.PlainSubs) result.Add(sub);
|
||||
foreach (var (_, qset) in level.Pwc.QueueSubs)
|
||||
foreach (var sub in qset) result.Add(sub);
|
||||
if (level.Pwc.Next != null) CollectAll(level.Pwc.Next, result);
|
||||
}
|
||||
if (level.Fwc != null)
|
||||
{
|
||||
foreach (var sub in level.Fwc.PlainSubs) result.Add(sub);
|
||||
foreach (var (_, qset) in level.Fwc.QueueSubs)
|
||||
foreach (var sub in qset) result.Add(sub);
|
||||
if (level.Fwc.Next != null) CollectAll(level.Fwc.Next, result);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the current number of entries in the cache.
|
||||
/// </summary>
|
||||
public int CacheCount
|
||||
{
|
||||
get
|
||||
{
|
||||
_lock.EnterReadLock();
|
||||
try { return _cache?.Count ?? 0; }
|
||||
finally { _lock.ExitReadLock(); }
|
||||
}
|
||||
}
|
||||
|
||||
public void Insert(Subscription sub)
|
||||
{
|
||||
var subject = sub.Subject;
|
||||
|
||||
Reference in New Issue
Block a user