aurora

package
v0.0.0-...-c9303cd Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 24, 2020 License: Apache-2.0 Imports: 67 Imported by: 0

Documentation

Index

Constants

View Source
const LRUCacheSize = 50000

Variables

This section is empty.

Functions

This section is empty.

Types

type Action

type Action struct {
	actions.Base
	App *App
	Log *log.Entry
	// contains filtered or unexported fields
}

Action is the "base type" for all actions in aurora. It provides structs that embed it with access to the App struct.

Additionally, this type is a trigger for go-codegen and causes the file at Action.tmpl to be instantiated for each struct that embeds Action.

func (*Action) CoreQ

func (action *Action) CoreQ() *core.Q

CoreQ provides access to queries that access the diamnet core database.

func (*Action) EnsureHistoryFreshness

func (action *Action) EnsureHistoryFreshness()

EnsureHistoryFreshness halts processing and raises

func (*Action) FullURL

func (action *Action) FullURL() *url.URL

FullURL returns the full url for this request

func (*Action) HistoryQ

func (action *Action) HistoryQ() *history.Q

HistoryQ provides access to queries that access the history portion of aurora's database.

func (*Action) Prepare

func (action *Action) Prepare(w http.ResponseWriter, r *http.Request)

Prepare sets the action's App field based upon the context

func (*Action) ValidateCursorAsDefault

func (action *Action) ValidateCursorAsDefault()

ValidateCursorAsDefault ensures that the cursor parameter is valid in the way it is normally used, i.e. it is either the string "now" or a string of numerals that can be parsed as an int64.

func (*Action) ValidateCursorWithinHistory

func (action *Action) ValidateCursorWithinHistory()

ValidateCursorWithinHistory compares the requested page of data against the ledger state of the history database. In the event that the cursor is guaranteed to return no results, we return a 410 GONE http response.

type App

type App struct {
	// contains filtered or unexported fields
}

App represents the root of the state of a aurora instance.

func AppFromContext

func AppFromContext(ctx context.Context) *App

AppFromContext returns the set app, if one has been set, from the provided context returns nil if no app has been set.

func NewApp

func NewApp(config Config) *App

NewApp constructs an new App instance from the provided config.

func (*App) AuroraSession

func (a *App) AuroraSession(ctx context.Context) *db.Session

AuroraSession returns a new session that loads data from the aurora database. The returned session is bound to `ctx`.

func (*App) Close

func (a *App) Close()

Close cancels the app. It does not close DB connections - use App.CloseDB().

func (*App) CloseDB

func (a *App) CloseDB()

CloseDB closes DB connections. When using during web server shut down make sure all requests are first properly finished to avoid "sql: database is closed" errors.

func (*App) CoreQ

func (a *App) CoreQ() *core.Q

CoreQ returns a helper object for performing sql queries aginst the diamnet core database.

func (*App) CoreSession

func (a *App) CoreSession(ctx context.Context) *db.Session

CoreSession returns a new session that loads data from the diamnet core database. The returned session is bound to `ctx`.

func (*App) DeleteUnretainedHistory

func (a *App) DeleteUnretainedHistory() error

DeleteUnretainedHistory forwards to the app's reaper. See `reap.DeleteUnretainedHistory` for details

func (*App) GetRateLimiter

func (a *App) GetRateLimiter() *throttled.HTTPRateLimiter

GetRateLimiter returns the HTTPRateLimiter of the App.

func (*App) HistoryQ

func (a *App) HistoryQ() *history.Q

HistoryQ returns a helper object for performing sql queries against the history portion of aurora's database.

func (*App) IsHistoryStale

func (a *App) IsHistoryStale() bool

IsHistoryStale returns true if the latest history ledger is more than `StaleThreshold` ledgers behind the latest core ledger

func (*App) Serve

func (a *App) Serve()

Serve starts the aurora web server, binding it to a socket, setting up the shutdown signals.

func (*App) Tick

func (a *App) Tick()

Tick triggers aurora to update all of it's background processes such as transaction submission, metrics, ingestion and reaping.

func (*App) UpdateDiamNetCoreInfo

func (a *App) UpdateDiamNetCoreInfo()

UpdateDiamNetCoreInfo updates the value of coreVersion, currentProtocolVersion, and coreSupportedProtocolVersion from the DiamNet core API.

func (*App) UpdateLedgerState

func (a *App) UpdateLedgerState()

UpdateLedgerState triggers a refresh of several metrics gauges, such as open db connections and ledger state

func (*App) UpdateMetrics

func (a *App) UpdateMetrics()

UpdateMetrics triggers a refresh of several metrics gauges, such as open db connections and ledger state

func (*App) UpdateOperationFeeStatsState

func (a *App) UpdateOperationFeeStatsState()

UpdateOperationFeeStatsState triggers a refresh of several operation fee metrics.

type AssetsAction

type AssetsAction struct {
	Action
	AssetCode    string
	AssetIssuer  string
	PagingParams db2.PageQuery
	Records      []assets.AssetStatsR
	Page         hal.Page
}

AssetsAction renders a page of Assets

func (AssetsAction) Handle

func (action AssetsAction) Handle(w http.ResponseWriter, r *http.Request)

func (*AssetsAction) JSON

func (action *AssetsAction) JSON() error

JSON is a method for actions.JSON

type Config

type Config struct {
	DatabaseURL            string
	DiamNetCoreDatabaseURL string
	DiamNetCoreURL         string
	HistoryArchiveURLs     []string
	Port                   uint

	// MaxDBConnections has a priority over all 4 values below.
	MaxDBConnections           int
	AuroraDBMaxOpenConnections int
	AuroraDBMaxIdleConnections int
	CoreDBMaxOpenConnections   int
	CoreDBMaxIdleConnections   int

	SSEUpdateFrequency time.Duration
	ConnectionTimeout  time.Duration
	RateQuota          *throttled.RateQuota
	RateLimitRedisKey  string
	RedisURL           string
	FriendbotURL       *url.URL
	LogLevel           logrus.Level
	LogFile            string
	// MaxPathLength is the maximum length of the path returned by `/paths` endpoint.
	MaxPathLength     uint
	NetworkPassphrase string
	SentryDSN         string
	LogglyToken       string
	LogglyTag         string
	// TLSCert is a path to a certificate file to use for aurora's TLS config
	TLSCert string
	// TLSKey is the path to a private key file to use for aurora's TLS config
	TLSKey string
	// Ingest toggles whether this aurora instance should run the data ingestion subsystem.
	Ingest bool
	// EnableExperimentalIngestion  a feature flag that enables the exprimental ingestion subsystem.
	// If this flag is true then the following features in aurora will be available:
	// * In-Memory path finding
	// * Accounts for signers endpoint
	EnableExperimentalIngestion bool
	// IngestStateReaderTempSet defines where to store temporary objects during state
	// ingestion. Possible options are `memory` and `postgres`.
	IngestStateReaderTempSet string
	// IngestFailedTransactions toggles whether to ingest failed transactions
	IngestFailedTransactions bool
	// CursorName is the cursor used for ingesting from diamnet-core.
	// Setting multiple cursors in different Aurora instances allows multiple
	// Auroras to ingest from the same diamnet-core instance without cursor
	// collisions.
	CursorName string
	// HistoryRetentionCount represents the minimum number of ledgers worth of
	// history data to retain in the aurora database. For the purposes of
	// determining a "retention duration", each ledger roughly corresponds to 10
	// seconds of real time.
	HistoryRetentionCount uint
	// StaleThreshold represents the number of ledgers a history database may be
	// out-of-date by before aurora begins to respond with an error to history
	// requests.
	StaleThreshold uint
	// SkipCursorUpdate causes the ingestor to skip reporting the "last imported
	// ledger" state to diamnet-core.
	SkipCursorUpdate bool
	// EnableAssetStats is a feature flag that determines whether to calculate
	// asset stats during the ingestion and expose `/assets` endpoint.
	// Enabling it has a negative impact on CPU when ingesting ledgers full of
	// many different assets related operations.
	EnableAssetStats bool
}

Config is the configuration for aurora. It gets populated by the app's main function and is provided to NewApp.

type DataShowAction

type DataShowAction struct {
	Action
	Address string
	Key     string
	Data    core.AccountData
}

DataShowAction renders a account summary found by its address.

func (DataShowAction) Handle

func (action DataShowAction) Handle(w http.ResponseWriter, r *http.Request)

func (*DataShowAction) JSON

func (action *DataShowAction) JSON() error

JSON is a method for actions.JSON

func (*DataShowAction) Raw

func (action *DataShowAction) Raw() error

Raw is a method for actions.Raw

func (*DataShowAction) SSE

func (action *DataShowAction) SSE(stream *sse.Stream) error

SSE is a method for actions.SSE

type EffectIndexAction

type EffectIndexAction struct {
	Action
	AccountFilter     string
	LedgerFilter      int32
	TransactionFilter string
	OperationFilter   int64

	PagingParams db2.PageQuery
	Records      []history.Effect
	Page         hal.Page
	Ledgers      *history.LedgerCache
}

EffectIndexAction renders a page of effect resources, identified by a normal page query and optionally filtered by an account, ledger, transaction, or operation.

func (EffectIndexAction) Handle

func (action EffectIndexAction) Handle(w http.ResponseWriter, r *http.Request)

func (*EffectIndexAction) JSON

func (action *EffectIndexAction) JSON() error

JSON is a method for actions.JSON

func (*EffectIndexAction) SSE

func (action *EffectIndexAction) SSE(stream *sse.Stream) error

SSE is a method for actions.SSE

func (*EffectIndexAction) ValidateCursor

func (action *EffectIndexAction) ValidateCursor()

ValidateCursor ensures that the provided cursor parameter is of the form OPERATIONID-INDEX (such as 1234-56) or is the special value "now" that represents the the cursor directly after the last closed ledger

type FixedPathIndexAction

type FixedPathIndexAction struct {
	Action

	Records []paths.Path
	Page    hal.BasePage
	// contains filtered or unexported fields
}

FixedPathIndexAction provides path finding where the source asset and destination asset is fixed

func (FixedPathIndexAction) Handle

func (action FixedPathIndexAction) Handle(w http.ResponseWriter, r *http.Request)

func (*FixedPathIndexAction) JSON

func (action *FixedPathIndexAction) JSON() error

JSON implements actions.JSON

type LedgerIndexAction

type LedgerIndexAction struct {
	Action
	PagingParams db2.PageQuery
	Records      []history.Ledger
	Page         hal.Page
}

LedgerIndexAction renders a page of ledger resources, identified by a normal page query.

func (LedgerIndexAction) Handle

func (action LedgerIndexAction) Handle(w http.ResponseWriter, r *http.Request)

func (*LedgerIndexAction) JSON

func (action *LedgerIndexAction) JSON() error

JSON is a method for actions.JSON

func (*LedgerIndexAction) SSE

func (action *LedgerIndexAction) SSE(stream *sse.Stream) error

SSE is a method for actions.SSE

type LedgerShowAction

type LedgerShowAction struct {
	Action
	Sequence int32
	Record   history.Ledger
}

LedgerShowAction renders a ledger found by its sequence number.

func (LedgerShowAction) Handle

func (action LedgerShowAction) Handle(w http.ResponseWriter, r *http.Request)

func (*LedgerShowAction) JSON

func (action *LedgerShowAction) JSON() error

JSON is a method for actions.JSON

type MetricsAction

type MetricsAction struct {
	Action
	Snapshot map[string]interface{}
}

MetricsAction collects and renders a snapshot from the metrics system that will inlude any previously registered metrics.

func (MetricsAction) Handle

func (action MetricsAction) Handle(w http.ResponseWriter, r *http.Request)

func (*MetricsAction) JSON

func (action *MetricsAction) JSON() error

JSON is a method for actions.JSON

func (*MetricsAction) LoadSnapshot

func (action *MetricsAction) LoadSnapshot()

LoadSnapshot populates action.Snapshot

Original code copied from github.com/rcrowley/go-metrics MarshalJSON

type NotFoundAction

type NotFoundAction struct {
	Action
}

NotFoundAction renders a 404 response

func (NotFoundAction) Handle

func (action NotFoundAction) Handle(w http.ResponseWriter, r *http.Request)

func (*NotFoundAction) JSON

func (action *NotFoundAction) JSON() error

JSON is a method for actions.JSON

type NotImplementedAction

type NotImplementedAction struct {
	Action
}

NotImplementedAction renders a NotImplemented prblem

func (NotImplementedAction) Handle

func (action NotImplementedAction) Handle(w http.ResponseWriter, r *http.Request)

func (*NotImplementedAction) JSON

func (action *NotImplementedAction) JSON() error

JSON is a method for actions.JSON

type OffersByAccountAction

type OffersByAccountAction struct {
	Action
	Address   string
	PageQuery db2.PageQuery
	Records   []core.Offer
	Ledgers   *history.LedgerCache
	Page      hal.Page
}

OffersByAccountAction renders a page of offer resources, for a given account. These offers are present in the ledger as of the latest validated ledger.

func (OffersByAccountAction) Handle

func (action OffersByAccountAction) Handle(w http.ResponseWriter, r *http.Request)

func (*OffersByAccountAction) JSON

func (action *OffersByAccountAction) JSON() error

JSON is a method for actions.JSON

func (*OffersByAccountAction) SSE

func (action *OffersByAccountAction) SSE(stream *sse.Stream) error

SSE is a method for actions.SSE

type OperationFeeStatsAction

type OperationFeeStatsAction struct {
	Action
	FeeMin              int64
	FeeMode             int64
	FeeP10              int64
	FeeP20              int64
	FeeP30              int64
	FeeP40              int64
	FeeP50              int64
	FeeP60              int64
	FeeP70              int64
	FeeP80              int64
	FeeP90              int64
	FeeP95              int64
	FeeP99              int64
	LedgerCapacityUsage string
	LastBaseFee         int64
	LastLedger          int64
}

OperationFeeStatsAction renders a few useful statistics that describe the current state of operation fees on the network.

func (OperationFeeStatsAction) Handle

func (*OperationFeeStatsAction) JSON

func (action *OperationFeeStatsAction) JSON() error

JSON is a method for actions.JSON

type OperationIndexAction

type OperationIndexAction struct {
	Action
	LedgerFilter        int32
	AccountFilter       string
	TransactionFilter   string
	PagingParams        db2.PageQuery
	OperationRecords    []history.Operation
	TransactionRecords  []history.Transaction
	Ledgers             *history.LedgerCache
	Page                hal.Page
	IncludeFailed       bool
	IncludeTransactions bool
	OnlyPayments        bool
}

OperationIndexAction renders a page of operations resources, identified by a normal page query and optionally filtered by an account, ledger, or transaction.

func (OperationIndexAction) Handle

func (action OperationIndexAction) Handle(w http.ResponseWriter, r *http.Request)

func (*OperationIndexAction) JSON

func (action *OperationIndexAction) JSON() error

JSON is a method for actions.JSON

func (*OperationIndexAction) SSE

func (action *OperationIndexAction) SSE(stream *sse.Stream) error

SSE is a method for actions.SSE

type OperationShowAction

type OperationShowAction struct {
	Action
	ID                  int64
	OperationRecord     history.Operation
	TransactionRecord   *history.Transaction
	Ledger              history.Ledger
	IncludeTransactions bool
	Resource            interface{}
}

OperationShowAction renders a page of operation resources.

func (OperationShowAction) Handle

func (action OperationShowAction) Handle(w http.ResponseWriter, r *http.Request)

func (*OperationShowAction) JSON

func (action *OperationShowAction) JSON() error

JSON is a method for actions.JSON

type OrderBookShowAction

type OrderBookShowAction struct {
	Action
	Selling  xdr.Asset
	Buying   xdr.Asset
	Record   core.OrderBookSummary
	Resource aurora.OrderBookSummary
	Limit    uint64
}

OrderBookShowAction renders a account summary found by its address.

func (OrderBookShowAction) Handle

func (action OrderBookShowAction) Handle(w http.ResponseWriter, r *http.Request)

func (*OrderBookShowAction) JSON

func (action *OrderBookShowAction) JSON() error

JSON is a method for actions.JSON

func (*OrderBookShowAction) LoadEvent

func (action *OrderBookShowAction) LoadEvent() (sse.Event, error)

func (*OrderBookShowAction) LoadQuery

func (action *OrderBookShowAction) LoadQuery()

LoadQuery sets action.Query from the request params

func (*OrderBookShowAction) LoadRecord

func (action *OrderBookShowAction) LoadRecord()

LoadRecord populates action.Record

func (*OrderBookShowAction) LoadResource

func (action *OrderBookShowAction) LoadResource()

LoadResource populates action.Record

type PathIndexAction

type PathIndexAction struct {
	Action
	Query   paths.Query
	Records []paths.Path
	Page    hal.BasePage
}

PathIndexAction provides path finding

func (PathIndexAction) Handle

func (action PathIndexAction) Handle(w http.ResponseWriter, r *http.Request)

func (*PathIndexAction) JSON

func (action *PathIndexAction) JSON() error

JSON implements actions.JSON

type RateLimitExceededAction

type RateLimitExceededAction struct {
	Action
}

RateLimitExceededAction renders a 429 response

func (RateLimitExceededAction) Handle

func (RateLimitExceededAction) ServeHTTP

func (action RateLimitExceededAction) ServeHTTP(w http.ResponseWriter, r *http.Request)

type RootAction

type RootAction struct {
	Action
}

RootAction provides a summary of the aurora instance and links to various useful endpoints

func (RootAction) Handle

func (action RootAction) Handle(w http.ResponseWriter, r *http.Request)

func (*RootAction) JSON

func (action *RootAction) JSON() error

JSON renders the json response for RootAction

type TradeAggregateIndexAction

type TradeAggregateIndexAction struct {
	Action
	BaseAssetFilter    xdr.Asset
	CounterAssetFilter xdr.Asset
	StartTimeFilter    time.Millis
	EndTimeFilter      time.Millis
	OffsetFilter       int64
	ResolutionFilter   int64
	PagingParams       db2.PageQuery
	Records            []history.TradeAggregation
	Page               hal.Page
}

func (TradeAggregateIndexAction) Handle

func (*TradeAggregateIndexAction) JSON

func (action *TradeAggregateIndexAction) JSON() error

JSON is a method for actions.JSON

type TradeIndexAction

type TradeIndexAction struct {
	Action
	BaseAssetFilter       xdr.Asset
	HasBaseAssetFilter    bool
	CounterAssetFilter    xdr.Asset
	HasCounterAssetFilter bool
	OfferFilter           int64
	AccountFilter         string
	PagingParams          db2.PageQuery
	Records               []history.Trade
	Page                  hal.Page
}

func (TradeIndexAction) Handle

func (action TradeIndexAction) Handle(w http.ResponseWriter, r *http.Request)

func (*TradeIndexAction) JSON

func (action *TradeIndexAction) JSON() error

JSON is a method for actions.JSON

func (*TradeIndexAction) SSE

func (action *TradeIndexAction) SSE(stream *sse.Stream) error

SSE is a method for actions.SSE

type TransactionCreateAction

type TransactionCreateAction struct {
	Action
	TX       string
	Result   txsub.Result
	Resource aurora.TransactionSuccess
}

TransactionCreateAction submits a transaction to the diamnet-core network on behalf of the requesting client.

func (TransactionCreateAction) Handle

func (*TransactionCreateAction) JSON

func (action *TransactionCreateAction) JSON() error

JSON format action handler

type VaryByRemoteIP

type VaryByRemoteIP struct{}

func (VaryByRemoteIP) Key

func (v VaryByRemoteIP) Key(r *http.Request) string

Directories

Path Synopsis
Package actions provides the infrastructure for defining and executing actions (code that is triggered in response to an client request) on aurora.
Package actions provides the infrastructure for defining and executing actions (code that is triggered in response to an client request) on aurora.
Package assets is a simple helper package to help convert to/from xdr.AssetType values
Package assets is a simple helper package to help convert to/from xdr.AssetType values
Package codes is a helper package to help convert to transaction and operation result codes to strings used in aurora.
Package codes is a helper package to help convert to transaction and operation result codes to strings used in aurora.
db2
Package db2 is the replacement for db.
Package db2 is the replacement for db.
core
Package core contains database record definitions useable for reading rows from a DiamNet Core db
Package core contains database record definitions useable for reading rows from a DiamNet Core db
history
Package history contains database record definitions useable for reading rows from a the history portion of aurora's database
Package history contains database record definitions useable for reading rows from a the history portion of aurora's database
sqx
Package sqx contains utilities and extensions for the squirrel package which is used by aurora to generate sql statements.
Package sqx contains utilities and extensions for the squirrel package which is used by aurora to generate sql statements.
Package expingest contains the new ingestion system for aurora.
Package expingest contains the new ingestion system for aurora.
Package hchi provides functions to support embedded and retrieving a request id from a go context tree
Package hchi provides functions to support embedded and retrieving a request id from a go context tree
Package ingest contains the ingestion system for aurora.
Package ingest contains the ingestion system for aurora.
participants
Package participants contains functions to derive a set of "participant" addresses for various data structures in the DiamNet network's ledger.
Package participants contains functions to derive a set of "participant" addresses for various data structures in the DiamNet network's ledger.
Package ledger provides useful utilities concerning ledgers within diamnet, specifically as a central location to store a cached snapshot of the state of both aurora's and diamnet-core's views of the ledger.
Package ledger provides useful utilities concerning ledgers within diamnet, specifically as a central location to store a cached snapshot of the state of both aurora's and diamnet-core's views of the ledger.
Package operationfeestats provides useful utilities concerning operation fee stats within diamnet,specifically as a central location to store a cached snapshot of the state of network per operation fees and surge pricing.
Package operationfeestats provides useful utilities concerning operation fee stats within diamnet,specifically as a central location to store a cached snapshot of the state of network per operation fees and surge pricing.
Package paths provides utilities and facilities for payment paths as needed by aurora.
Package paths provides utilities and facilities for payment paths as needed by aurora.
Package reap contains the history reaping subsystem for aurora.
Package reap contains the history reaping subsystem for aurora.
sse
This package contains the Server Sent Events implementation used by aurora.
This package contains the Server Sent Events implementation used by aurora.
Package simplepath provides an implementation of paths.
Package simplepath provides an implementation of paths.
Package test contains simple test helpers that should not have any dependencies on aurora's packages.
Package test contains simple test helpers that should not have any dependencies on aurora's packages.
db
Package db provides helpers to connect to test databases.
Package db provides helpers to connect to test databases.
trades
Common infrastructure for testing Trades
Common infrastructure for testing Trades
Package txsub provides the machinery that aurora uses to submit transactions to the diamnet network and track their progress.
Package txsub provides the machinery that aurora uses to submit transactions to the diamnet network and track their progress.
results/db
Package results provides an implementation of the txsub.ResultProvider interface backed using the SQL databases used by both diamnet core and aurora
Package results provides an implementation of the txsub.ResultProvider interface backed using the SQL databases used by both diamnet core and aurora
sequence
Package sequence providers helpers to manage sequence numbers on behalf of aurora clients.
Package sequence providers helpers to manage sequence numbers on behalf of aurora clients.
Package utf8 contains utilities for working with utf8 data.
Package utf8 contains utilities for working with utf8 data.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL