mirror of
https://github.com/openziti/zrok.git
synced 2026-08-28 10:16:59 -05:00
97 lines
2.8 KiB
Go
97 lines
2.8 KiB
Go
package agent
|
|
|
|
import (
|
|
"context"
|
|
"sort"
|
|
|
|
"github.com/openziti/zrok/v2/agent/agentGrpc"
|
|
"google.golang.org/protobuf/types/known/timestamppb"
|
|
)
|
|
|
|
func (i *agentGrpcImpl) Status(_ context.Context, _ *agentGrpc.StatusRequest) (*agentGrpc.StatusResponse, error) {
|
|
var accesses []*agentGrpc.AccessDetail
|
|
|
|
// active accesses
|
|
for feToken, acc := range i.agent.accesses {
|
|
accesses = append(accesses, &agentGrpc.AccessDetail{
|
|
FrontendToken: feToken,
|
|
Token: acc.token,
|
|
BindAddress: acc.bindAddress,
|
|
ResponseHeaders: acc.responseHeaders,
|
|
Status: "active",
|
|
})
|
|
}
|
|
|
|
// failed accesses
|
|
for failureId, access := range i.agent.retryManager.accesses {
|
|
status := "retrying"
|
|
if i.agent.cfg.MaxRetries > -1 && access.Failure.Count >= i.agent.cfg.MaxRetries {
|
|
status = "failed"
|
|
}
|
|
accesses = append(accesses, &agentGrpc.AccessDetail{
|
|
FrontendToken: "",
|
|
Token: access.Request.ShareToken,
|
|
BindAddress: access.Request.BindAddress,
|
|
ResponseHeaders: access.Request.ResponseHeaders,
|
|
Status: status,
|
|
Failure: &agentGrpc.Failure{
|
|
Id: failureId,
|
|
Count: int32(access.Failure.Count),
|
|
LastError: access.Failure.LastError,
|
|
NextRetry: timestamppb.New(access.Failure.NextRetry),
|
|
},
|
|
})
|
|
}
|
|
|
|
sort.Slice(accesses, func(i, j int) bool {
|
|
return accesses[i].Token < accesses[j].Token
|
|
})
|
|
|
|
var shares []*agentGrpc.ShareDetail
|
|
|
|
// active shares
|
|
for token, shr := range i.agent.shares {
|
|
shares = append(shares, &agentGrpc.ShareDetail{
|
|
Token: token,
|
|
ShareMode: string(shr.shareMode),
|
|
BackendMode: string(shr.backendMode),
|
|
FrontendEndpoint: shr.frontendEndpoints,
|
|
BackendEndpoint: shr.target,
|
|
Closed: shr.closed,
|
|
Status: "active",
|
|
})
|
|
}
|
|
|
|
// Add failed shares with failure IDs
|
|
for failureId, share := range i.agent.retryManager.publicShares {
|
|
status := "retrying"
|
|
if i.agent.cfg.MaxRetries > -1 && share.Failure.Count >= i.agent.cfg.MaxRetries {
|
|
status = "failed"
|
|
}
|
|
shares = append(shares, &agentGrpc.ShareDetail{
|
|
Token: "",
|
|
ShareMode: "public",
|
|
BackendMode: share.Request.BackendMode,
|
|
FrontendEndpoint: nil,
|
|
BackendEndpoint: share.Request.Target,
|
|
Closed: share.Request.Closed,
|
|
Status: status,
|
|
Failure: &agentGrpc.Failure{
|
|
Id: failureId,
|
|
Count: int32(share.Failure.Count),
|
|
LastError: share.Failure.LastError,
|
|
NextRetry: timestamppb.New(share.Failure.NextRetry),
|
|
},
|
|
})
|
|
}
|
|
|
|
sort.Slice(shares, func(i, j int) bool {
|
|
if shares[i].BackendEndpoint != shares[j].BackendEndpoint {
|
|
return shares[i].BackendEndpoint < shares[j].BackendEndpoint
|
|
}
|
|
return shares[i].Token < shares[j].Token
|
|
})
|
|
|
|
return &agentGrpc.StatusResponse{Accesses: accesses, Shares: shares}, nil
|
|
}
|