models

package
v0.3.1 Latest Latest
Warning

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

Go to latest
Published: Jun 21, 2022 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

generated by binding gen

generated by binding gen

generated by binding gen

generated by binding gen

generated by binding gen

generated by binding gen

generated by binding gen

generated by binding gen

generated by binding gen

generated by binding gen

generated by binding gen

generated by binding gen

generated by binding gen

generated by binding gen

generated by binding gen

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Milliseconds

type Milliseconds float64

func (Milliseconds) Seconds

func (m Milliseconds) Seconds() float64

type NullMilliseconds

type NullMilliseconds struct {
	sql.NullFloat64
}

func (*NullMilliseconds) Scan added in v0.3.1

func (m *NullMilliseconds) Scan(src interface{}) error

func (NullMilliseconds) Seconds

func (m NullMilliseconds) Seconds() float64

type PgDatabase

type PgDatabase struct {
	bun.BaseModel `bun:"pg_database"`
	Datname       string `bun:"datname" metric:"database,type:label"`
	FrozenXID     int64  `` /* 149-byte string literal not displayed */
	MinMXID       int64  `` /* 134-byte string literal not displayed */
}

+metric=slice

func (*PgDatabase) ToMetrics

func (r *PgDatabase) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgDatabaseSlice

type PgDatabaseSlice []PgDatabase

func (PgDatabaseSlice) ToMetrics

func (r PgDatabaseSlice) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgLocks

type PgLocks struct {
	bun.BaseModel `bun:"pg_locks"`
	Locktype      sql.NullString `bun:"locktype" help:"Type of the lockable object" metric:",type:label"`
	ScopeType     sql.NullString `bun:"scope_type" help:"The type of the target" metric:",type:label"`
	Database      sql.NullString `bun:"database" help:"The Database name if applicable" metric:",type:label"`
	Mode          sql.NullString `bun:"mode" help:"Name of the lock mode held or desired by this process" metric:",type:label"`
	Granted       sql.NullBool   `bun:"granted" help:"True if lock is held, false if lock is awaited" metric:",type:label"`
	Locks         int64          `bun:"locks" help:"Number of locks per state" metric:"count,type:gauge"`
}

+metric=slice

func (*PgLocks) ToMetrics

func (r *PgLocks) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgLocksSlice

type PgLocksSlice []PgLocks

func (PgLocksSlice) ToMetrics

func (r PgLocksSlice) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgPreparedTransactions

type PgPreparedTransactions struct {
	bun.BaseModel `bun:"pg_prepared_xacts"`
	Oldest        time.Time `bun:"oldest" help:"Time at which the oldest transaction was prepared for commit" metric:",type:counter"`
	Database      string    `bun:"database" help:"Name of the database which the transactions where executed" metric:",type:label"`
	Count         int64     `bun:"count" help:"Number of prepared transactions" metric:"count,type:gauge"`
}

+metric=slice

func (*PgPreparedTransactions) ToMetrics

func (r *PgPreparedTransactions) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgPreparedTransactionsSlice

type PgPreparedTransactionsSlice []PgPreparedTransactions

func (PgPreparedTransactionsSlice) ToMetrics

func (r PgPreparedTransactionsSlice) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatActivity

type PgStatActivity struct {
	bun.BaseModel   `bun:"pg_stat_activity"`
	DatID           int64          `bun:"datid" help:"OID of the database this backend is connected to" metric:"database_id,type:label"`
	DatName         string         `bun:"datname" help:"Name of the database this backend is connected to" metric:"database,type:label"`
	Usename         sql.NullString `bun:"usename" help:"Name of the user logged into this backend" metric:"username,type:label"`
	ApplicationName sql.NullString `bun:"application_name" help:"Name of the application that is connected to this backend" metric:",type:label"`
	ClientAddr      sql.NullString `bun:"client_addr" help:"IP address of the client connected to this backend" metric:",type:label"`
	State           sql.NullString `bun:"state" help:"Current overall state of this backend" metric:",type:label"`
	WaitEventType   sql.NullString `bun:"wait_event_type" help:"The type of event for which the backend is waiting, if any" metric:",type:label"`
	BackendType     sql.NullString `bun:"backend_type" help:"Type of current backend" metric:",type:label"`
	Connections     int64          `bun:"connections" help:"Number of active connections" metric:",type:gauge"`
}

+metric=slice

func (*PgStatActivity) ToMetrics

func (r *PgStatActivity) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatActivitySlice

type PgStatActivitySlice []PgStatActivity

func (PgStatActivitySlice) ToMetrics

func (r PgStatActivitySlice) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatArchiver

type PgStatArchiver struct {
	bun.BaseModel    `bun:"pg_stat_archiver"`
	ArchivedCount    int64     `bun:"archived_count" help:"Number of WAL files that have been successfully archived" metric:"archived_count_total"`
	LastArchivedTime time.Time `bun:"last_archived_time" help:"Time of the last successful archive operation"`
	FailedCount      int64     `bun:"failed_count" help:"Number of failed attempts for archiving WAL files"  metric:"failed_count_total"`
	LastFailedTime   time.Time `bun:"last_failed_time" help:"Time of the last failed archival operation"`
	StatsReset       time.Time `bun:"stats_reset" help:"Time at which these statistics were last reset"`
}

+metric=row

func (*PgStatArchiver) ToMetrics

func (r *PgStatArchiver) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatBgWriter

type PgStatBgWriter struct {
	bun.BaseModel       `bun:"pg_stat_bgwriter"`
	CheckpointsTimed    int64     `bun:"checkpoints_timed" help:"Number of scheduled checkpoints that have been performed" metric:"checkpoints_timed_total"`
	CheckpointsReq      int64     `bun:"checkpoints_req" help:"Number of requested checkpoints that have been performed" metric:"checkpoints_req_total"`
	CheckpointWriteTime float64   `` /* 204-byte string literal not displayed */
	CheckpointSyncTime  float64   `` /* 208-byte string literal not displayed */
	BuffersCheckpoint   int64     `bun:"buffers_checkpoint" help:"Number of buffers written during checkpoints" metric:"buffers_checkpoint_total"`
	BuffersClean        int64     `bun:"buffers_clean" help:"Number of buffers written by the background writer" metric:"buffers_clean_total"`
	MaxwrittenClean     int64     `` /* 163-byte string literal not displayed */
	BuffersBackend      int64     `bun:"buffers_backend" help:"Number of buffers written directly by a backend" metric:"buffers_backend_total"`
	BuffersBackendFsync int64     `` /* 131-byte string literal not displayed */
	BuffersAlloc        int64     `bun:"buffers_alloc" help:"Number of buffers allocated" metric:"buffers_alloc_total"`
	StatsReset          time.Time `bun:"stats_reset" help:"Time at which these statistics were last reset"`
}

+metric=row

func (*PgStatBgWriter) ToMetrics

func (r *PgStatBgWriter) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatDatabase

type PgStatDatabase struct {
	bun.BaseModel    `bun:"pg_stat_database"`
	DatID            int64         `bun:"datid" help:"OID of a database" metric:"database_id,type:label"`
	DatName          string        `bun:"datname" help:"Name of this database" metric:"database,type:label"`
	NumBackends      int           `bun:"numbackends" help:"Number of backends currently connected to this database" metric:"backends,type:gauge"`
	XactCommit       int64         `bun:"xact_commit" help:"Number of transactions in this database that have been committed" metric:"xact_commited_total"`
	XactRollback     int64         `bun:"xact_rollback" help:"Number of transactions in this database that have been rolled back" metric:"xact_rolledback_total"`
	BlksRead         int64         `bun:"blks_read" help:"Number of disk blocks read in this database" metric:"blocks_read_total"`
	BlksHit          int64         `` /* 148-byte string literal not displayed */
	TupReturned      int64         `bun:"tup_returned" help:"Number of rows returned by queries in this database" metric:"rows_returned_total"`
	TupFetched       int64         `bun:"tup_fetched" help:"Number of rows fetched by queries in this database" metric:"rows_fetched_total"`
	TupInserted      int64         `bun:"tup_inserted" help:"Number of rows inserted by queries in this database" metric:"rows_inserted_total"`
	TupUpdated       int64         `bun:"tup_updated" help:"Number of rows updated by queries in this database" metric:"rows_updated_total"`
	TupDeleted       int64         `bun:"tup_deleted" help:"Number of rows deleted by queries in this database" metric:"rows_deleted_total"`
	Conflicts        int64         `bun:"conflicts" help:"Number of queries canceled due to conflicts with recovery in this database"  metric:"conflicts_total"`
	TempFiles        int64         `bun:"temp_files" help:"Number of temporary files created by queries in this database"  metric:"temp_files_total"`
	TempBytes        int64         `` /* 126-byte string literal not displayed */
	Deadlocks        int64         `bun:"deadlocks" help:"Number of deadlocks detected in this database"  metric:"deadlocks_total"`
	ChecksumFailures sql.NullInt64 `` // new in PG12
	/* 127-byte string literal not displayed */
	ChecksumLastFailure bun.NullTime `` // new in PG12
	/* 145-byte string literal not displayed */
	BlkReadTime           Milliseconds     `bun:"blk_read_time" help:"Time spent reading data file blocks by backends in this database" metric:"blk_read_seconds_total"`
	BlkWriteTime          Milliseconds     `bun:"blk_write_time" help:"Time spent writing data file blocks by backends in this database" metric:"blk_write_seconds_total"`
	SessionTime           NullMilliseconds `bun:"session_time" help:"Time spent by database sessions in this database, in milliseconds" metric:"session_time_total"`   // new in PG14
	ActiveTime            NullMilliseconds `bun:"active_time" help:"Time spent executing SQL statements in this database, in milliseconds" metric:"active_time_total"` // new in PG14
	IdleInTransactionTime NullMilliseconds ``                                                                                                                          // new in PG14
	/* 152-byte string literal not displayed */
	Sessions          sql.NullInt64 `bun:"sessions" help:"Total number of sessions established to this database" metric:"sessions_count"` // new in PG14
	SessionsAbandoned sql.NullInt64 ``                                                                                                    // new in PG14
	/* 173-byte string literal not displayed */
	SessionsFatal sql.NullInt64 `` // new in PG14
	/* 139-byte string literal not displayed */
	SessionsKilled sql.NullInt64 `` // new in PG14
	/* 150-byte string literal not displayed */
	StatsReset time.Time `bun:"stats_reset" help:"Time at which these statistics were last reset"`
}

+metric=slice

func (*PgStatDatabase) ToMetrics

func (r *PgStatDatabase) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatDatabaseConflicts

type PgStatDatabaseConflicts struct {
	bun.BaseModel  `bun:"pg_stat_database_conflicts"`
	DatID          int64  `bun:"datid" help:"OID of a database" metric:"database_id,type:label"`
	DatName        string `bun:"datname" help:"Name of this database" metric:"database,type:label"`
	ConfTablespace int64  `` /* 147-byte string literal not displayed */
	ConfLock       int64  `` /* 129-byte string literal not displayed */
	ConfSnapshot   int64  `` /* 137-byte string literal not displayed */
	ConfBufferpin  int64  `` /* 140-byte string literal not displayed */
	ConfDeadlock   int64  `` /* 133-byte string literal not displayed */
}

+metric=slice

func (*PgStatDatabaseConflicts) ToMetrics

func (r *PgStatDatabaseConflicts) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatDatabaseConflictsSlice

type PgStatDatabaseConflictsSlice []PgStatDatabaseConflicts

func (PgStatDatabaseConflictsSlice) ToMetrics

func (r PgStatDatabaseConflictsSlice) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatDatabaseSlice

type PgStatDatabaseSlice []PgStatDatabase

func (PgStatDatabaseSlice) ToMetrics

func (r PgStatDatabaseSlice) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatIOUserTables

type PgStatIOUserTables struct {
	bun.BaseModel `bun:"pg_statio_user_tables"`
	SchemaName    string `bun:"schemaname" help:"Name of the schema that this table is in" metric:"schema,type:label"`
	Relname       string `bun:"relname" help:"Name of this table" metric:"table,type:label"`
	HeapBlksRead  int64  `bun:"heap_blks_read" help:"Number of disk blocks read from this table" metric:"heap_blocks_read_total"`
	HeapBlksHit   int64  `bun:"heap_blks_hit" help:"Number of buffer hits in this table"  metric:"heap_blocks_hit_total"`
	IdxBlksRead   int64  `bun:"idx_blks_read" help:"Number of disk blocks read from all indexes on this table" metric:"index_blocks_read_total"`
	IdxBlksHit    int64  `bun:"idx_blks_hit" help:"Number of buffer hits in all indexes on this table" metric:"index_blocks_hit_total"`
	ToastBlksRead int64  `bun:"toast_blks_read" help:"Number of disk blocks read from this table's TOAST table" metric:"toast_blocks_read_total"`
	ToastBlksHit  int64  `bun:"toast_blks_hit" help:"Number of buffer hits in this table's TOAST table"  metric:"toast_blocks_hit_total"`
	TIDXBlksRead  int64  `` /* 131-byte string literal not displayed */
	TIDXBlksHit   int64  `bun:"tidx_blks_hit" help:"Number of buffer hits in this table's TOAST table indexes"  metric:"toast_index_blocks_hit_total"`
}

+metric=slice

func (*PgStatIOUserTables) ToMetrics

func (r *PgStatIOUserTables) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatIOUserTablesSlice

type PgStatIOUserTablesSlice []PgStatIOUserTables

func (PgStatIOUserTablesSlice) ToMetrics

func (r PgStatIOUserTablesSlice) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatReplication

type PgStatReplication struct {
	bun.BaseModel   `bun:"pg_stat_replication"`
	PID             int            `bun:"pid" help:"Process ID of a WAL sender process" metric:",type:label"`
	ApplicationName string         `bun:"application_name" help:"Name of the application that is connected to this WAL sender" metric:",type:label"`
	ClientAddr      sql.NullString `bun:"client_addr" help:"IP address of the client connected to this WAL sender." metric:",type:label"` // TODO: should this be optional?
	BackendXmin     int64          `bun:"backend_xmin" help:"This standby's xmin horizon reported by hot_standby_feedback."`
	SentBytesLag    int64          `bun:"sent_lag_bytes" help:"Number of bytes not yet sent on this connection" metric:",type:gauge"`
	WriteBytesLag   int64          `bun:"write_lag_bytes" help:"Number of bytes not yet written to this on this standby server" metric:",type:gauge"`
	FlushBytesLag   int64          `bun:"flush_lag_bytes" help:"Number of bytes not yet flushed to disk by this standby server" metric:",type:gauge"`
	ReplayBytesLag  int64          `bun:"replay_lag_bytes" help:"Number of bytes not yet replayed on this standby server" metric:",type:gauge"`

	// PostgreSQL 10 and newer
	WriteLag  sql.NullFloat64 `` /* 177-byte string literal not displayed */
	FlushLag  sql.NullFloat64 `` /* 189-byte string literal not displayed */
	ReplayLag sql.NullFloat64 `` /* 200-byte string literal not displayed */
}

+metric=slice

func (*PgStatReplication) ToMetrics

func (r *PgStatReplication) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatReplicationSlice

type PgStatReplicationSlice []PgStatReplication

func (PgStatReplicationSlice) ToMetrics

func (r PgStatReplicationSlice) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatReplicationSlots

type PgStatReplicationSlots struct {
	bun.BaseModel `bun:"pg_stat_replication_slots"`
	SlotName      string    `bun:"slot_name" help:"A unique, cluster-wide identifier for the replication slot" metric:"slot_name,type:label"`
	SpillTxns     int64     `` /* 169-byte string literal not displayed */
	SpillCount    int64     `bun:"spill_count" help:"Number of times transactions were spilled to disk while decoding changes from WAL for this slot"`
	SpillBytes    int64     `` /* 135-byte string literal not displayed */
	StreamTxns    int64     `` /* 220-byte string literal not displayed */
	StreamCount   int64     `` /* 156-byte string literal not displayed */
	StreamBytes   int64     `` /* 175-byte string literal not displayed */
	TotalTxns     int64     `bun:"total_txns" help:"Number of decoded transactions sent to the decoding output plugin for this slot"`
	TotalBytes    int64     `` /* 160-byte string literal not displayed */
	StatsReset    time.Time `bun:"stats_reset" help:"Time at which these statistics were last reset"`
}

+metric=slice

func (*PgStatReplicationSlots) ToMetrics

func (r *PgStatReplicationSlots) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatReplicationSlotsSlice

type PgStatReplicationSlotsSlice []PgStatReplicationSlots

func (PgStatReplicationSlotsSlice) ToMetrics

func (r PgStatReplicationSlotsSlice) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatStatements

type PgStatStatements struct {
	bun.BaseModel `bun:"pg_stat_statements"`
	Datname       string           `bun:"datname" metric:"database,type:label"`
	Usename       string           `bun:"usename" metric:"username,type:label"`
	Query         string           `bun:"query" metric:"query,type:label"`
	Calls         int64            `bun:"calls" help:"Number of times executed" metric:"calls_total"`
	TotalTime     Milliseconds     `bun:"total_time" help:"Total time spent in the statement, in seconds" metric:"time_seconds_total"`
	MeanTime      NullMilliseconds `bun:"mean_time" help:"Mean time spent in the statement, in seconds" metric:"time_seconds_mean,type:gauge"`
}

+metric=slice

func (*PgStatStatements) ToMetrics

func (r *PgStatStatements) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatStatementsSlice

type PgStatStatementsSlice []PgStatStatements

func (PgStatStatementsSlice) ToMetrics

func (r PgStatStatementsSlice) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatUserTables

type PgStatUserTables struct {
	bun.BaseModel    `bun:"pg_stat_user_tables"`
	SchemaName       string    `bun:"schemaname" help:"Name of the schema that this table is in" metric:"schema,type:label"`
	Relname          string    `bun:"relname" help:"Name of this table" metric:"table,type:label"`
	SeqScan          int64     `bun:"seq_scan" help:"Number of sequential scans initiated on this table" metric:"seq_scans_total"`
	SeqTupRead       int64     `bun:"seq_tup_read" help:"Number of live rows fetched by sequential scans" metric:"seq_rows_reads_total"`
	IdxScan          int64     `bun:"idx_scan" help:"Number of index scans initiated on this table" metric:"index_scans_total"`
	IdxTupFetch      int64     `bun:"idx_tup_fetch" help:"Number of live rows fetched by index scans" metric:"index_rows_fetch_total"`
	TupIns           int64     `bun:"n_tup_ins" help:"Number of rows inserted" metric:"rows_inserted_total"`
	TupUpd           int64     `bun:"n_tup_upd" help:"Number of rows updated" metric:"rows_updated_total"`
	TupDel           int64     `bun:"n_tup_del" help:"Number of rows deleted" metric:"rows_deleted_total"`
	TupHotUpd        int64     `bun:"n_tup_hot_upd" help:"Number of rows HOT updated" metric:"rows_hot_updated_total"`
	LiveTup          int64     `bun:"n_live_tup" help:"Estimated number of live rows" metric:"live_rows,type:gauge"`
	DeadTup          int64     `bun:"n_dead_tup" help:"Estimated number of dead rows" metric:"dead_rows,type:gauge"`
	ModSinceAnalyze  int64     `` /* 144-byte string literal not displayed */
	LastVacuum       time.Time `bun:"last_vacuum" help:"Last time at which this table was manually vacuumed"`
	LastAutoVacuum   time.Time `bun:"last_autovacuum" help:"Last time at which this table was vacuumed by the autovacuum daemon"`
	LastAnalyze      time.Time `bun:"last_analyze" help:"Last time at which this table was manually analyzed"`
	LastAutoAnalyze  time.Time `bun:"last_autoanalyze" help:"Last time at which this table was analyzed by the autovacuum daemon"`
	VacuumCount      int64     `bun:"vacuum_count" help:"Number of times this table has been manually vacuumed"`
	AutoVacuumCount  int64     `bun:"autovacuum_count" help:"Number of times this table has been vacuumed by the autovacuum daemon"`
	AnalyzeCount     int64     `bun:"analyze_count" help:"Number of times this table has been manually analyzed"`
	AutoAnalyzeCount int64     `bun:"autoanalyze_count" help:"Number of times this table has been analyzed by the autovacuum daemon"`
}

+metric=slice

func (*PgStatUserTables) ToMetrics

func (r *PgStatUserTables) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatUserTablesSlice

type PgStatUserTablesSlice []PgStatUserTables

func (PgStatUserTablesSlice) ToMetrics

func (r PgStatUserTablesSlice) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgStatWal

type PgStatWal struct {
	bun.BaseModel  `bun:"pg_stat_wal"`
	WalRecords     int64     `bun:"wal_records" help:"Total number of WAL records generated" metric:"records_total"`
	WalFpi         int64     `bun:"wal_fpi" help:"Total number of WAL full page images generated" metric:"fpi_total"`
	WalBytes       int64     `bun:"wal_bytes" help:"Total amount of WAL generated in bytes" metric:"bytes_total"`
	WalBuffersFull int64     `` /* 134-byte string literal not displayed */
	WalWrite       int64     `bun:"wal_write" help:"Number of times WAL buffers were written out to disk via XLogWrite request" metric:"write_count"`
	WalSync        int64     `bun:"wal_sync" help:"Number of times WAL files were synced to disk via issue_xlog_fsync request" metric:"sync_count"`
	WalWriteTime   float64   `` /* 147-byte string literal not displayed */
	WalSyncTime    float64   `` /* 150-byte string literal not displayed */
	StatsReset     time.Time `bun:"stats_reset" help:"Time at which these statistics were last reset"`
}

+metric=row

func (*PgStatWal) ToMetrics

func (r *PgStatWal) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

type PgTxid

type PgTxid struct {
	Current sql.NullInt64 `bun:"current" help:"The current transaction ID on the database cluster"`
}

+metric=row

func (*PgTxid) ToMetrics

func (r *PgTxid) ToMetrics(namespace string, subsystem string, ch chan<- prometheus.Metric, labelsKV ...string) error

Jump to

Keyboard shortcuts

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