forked from TrueCloudLab/frostfs-http-gw
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package utils
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-http-gw/resolver"
|
|
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool"
|
|
"github.com/valyala/fasthttp"
|
|
)
|
|
|
|
// GetContainerID decode container id, if it's not a valid container id
|
|
// then trey to resolve name using provided resolver.
|
|
func GetContainerID(ctx context.Context, containerID string, resolver *resolver.ContainerResolver) (*cid.ID, error) {
|
|
cnrID := new(cid.ID)
|
|
err := cnrID.DecodeString(containerID)
|
|
if err != nil {
|
|
cnrID, err = resolver.Resolve(ctx, containerID)
|
|
}
|
|
return cnrID, err
|
|
}
|
|
|
|
type EpochDurations struct {
|
|
CurrentEpoch uint64
|
|
MsPerBlock int64
|
|
BlockPerEpoch uint64
|
|
}
|
|
|
|
func GetEpochDurations(ctx context.Context, p *pool.Pool) (*EpochDurations, error) {
|
|
networkInfo, err := p.NetworkInfo(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
res := &EpochDurations{
|
|
CurrentEpoch: networkInfo.CurrentEpoch(),
|
|
MsPerBlock: networkInfo.MsPerBlock(),
|
|
BlockPerEpoch: networkInfo.EpochDuration(),
|
|
}
|
|
|
|
if res.BlockPerEpoch == 0 {
|
|
return nil, fmt.Errorf("EpochDuration is empty")
|
|
}
|
|
return res, nil
|
|
}
|
|
|
|
// SetContextToRequest adds new context to fasthttp request.
|
|
func SetContextToRequest(ctx context.Context, c *fasthttp.RequestCtx) {
|
|
c.SetUserValue("context", ctx)
|
|
}
|
|
|
|
// GetContextFromRequest returns main context from fasthttp request context.
|
|
func GetContextFromRequest(c *fasthttp.RequestCtx) context.Context {
|
|
return c.UserValue("context").(context.Context)
|
|
}
|