1// Copyright (C) 2019 Storj Labs, Inc.
2// See LICENSE for copying information.
3
4package satellite
5
6import (
7	"context"
8
9	hw "github.com/jtolds/monkit-hw/v2"
10	"github.com/spacemonkeygo/monkit/v3"
11
12	"storj.io/common/identity"
13	"storj.io/private/debug"
14	"storj.io/storj/private/server"
15	version_checker "storj.io/storj/private/version/checker"
16	"storj.io/storj/satellite/accounting"
17	"storj.io/storj/satellite/accounting/live"
18	"storj.io/storj/satellite/accounting/projectbwcleanup"
19	"storj.io/storj/satellite/accounting/rollup"
20	"storj.io/storj/satellite/accounting/rolluparchive"
21	"storj.io/storj/satellite/accounting/tally"
22	"storj.io/storj/satellite/admin"
23	"storj.io/storj/satellite/analytics"
24	"storj.io/storj/satellite/attribution"
25	"storj.io/storj/satellite/audit"
26	"storj.io/storj/satellite/buckets"
27	"storj.io/storj/satellite/compensation"
28	"storj.io/storj/satellite/console"
29	"storj.io/storj/satellite/console/consoleweb"
30	"storj.io/storj/satellite/contact"
31	"storj.io/storj/satellite/gc"
32	"storj.io/storj/satellite/gracefulexit"
33	"storj.io/storj/satellite/mailservice"
34	"storj.io/storj/satellite/metabase/zombiedeletion"
35	"storj.io/storj/satellite/metainfo"
36	"storj.io/storj/satellite/metainfo/expireddeletion"
37	"storj.io/storj/satellite/metrics"
38	"storj.io/storj/satellite/nodeapiversion"
39	"storj.io/storj/satellite/orders"
40	"storj.io/storj/satellite/overlay"
41	"storj.io/storj/satellite/overlay/straynodes"
42	"storj.io/storj/satellite/payments/paymentsconfig"
43	"storj.io/storj/satellite/payments/stripecoinpayments"
44	"storj.io/storj/satellite/repair/checker"
45	"storj.io/storj/satellite/repair/queue"
46	"storj.io/storj/satellite/repair/repairer"
47	"storj.io/storj/satellite/reputation"
48	"storj.io/storj/satellite/revocation"
49	"storj.io/storj/satellite/snopayouts"
50)
51
52var mon = monkit.Package()
53
54func init() {
55	hw.Register(monkit.Default)
56}
57
58// DB is the master database for the satellite.
59//
60// architecture: Master Database
61type DB interface {
62	// MigrateToLatest initializes the database
63	MigrateToLatest(ctx context.Context) error
64	// CheckVersion checks the database is the correct version
65	CheckVersion(ctx context.Context) error
66	// Close closes the database
67	Close() error
68
69	// TestingMigrateToLatest initializes the database for testplanet.
70	TestingMigrateToLatest(ctx context.Context) error
71
72	// PeerIdentities returns a storage for peer identities
73	PeerIdentities() overlay.PeerIdentities
74	// OverlayCache returns database for caching overlay information
75	OverlayCache() overlay.DB
76	// Reputation returns database for audit reputation information
77	Reputation() reputation.DB
78	// Attribution returns database for partner keys information
79	Attribution() attribution.DB
80	// StoragenodeAccounting returns database for storing information about storagenode use
81	StoragenodeAccounting() accounting.StoragenodeAccounting
82	// ProjectAccounting returns database for storing information about project data use
83	ProjectAccounting() accounting.ProjectAccounting
84	// RepairQueue returns queue for segments that need repairing
85	RepairQueue() queue.RepairQueue
86	// Console returns database for satellite console
87	Console() console.DB
88	// Orders returns database for orders
89	Orders() orders.DB
90	// Containment returns database for containment
91	Containment() audit.Containment
92	// Buckets returns the database to interact with buckets
93	Buckets() buckets.DB
94	// GracefulExit returns database for graceful exit
95	GracefulExit() gracefulexit.DB
96	// StripeCoinPayments returns stripecoinpayments database.
97	StripeCoinPayments() stripecoinpayments.DB
98	// SnoPayout returns database for payouts.
99	SNOPayouts() snopayouts.DB
100	// Compoensation tracks storage node compensation
101	Compensation() compensation.DB
102	// Revocation tracks revoked macaroons
103	Revocation() revocation.DB
104	// NodeAPIVersion tracks nodes observed api usage
105	NodeAPIVersion() nodeapiversion.DB
106}
107
108// Config is the global config satellite.
109type Config struct {
110	Identity identity.Config
111	Server   server.Config
112	Debug    debug.Config
113
114	Admin admin.Config
115
116	Contact    contact.Config
117	Overlay    overlay.Config
118	StrayNodes straynodes.Config
119
120	Metainfo metainfo.Config
121	Orders   orders.Config
122
123	Reputation reputation.Config
124
125	Checker  checker.Config
126	Repairer repairer.Config
127	Audit    audit.Config
128
129	GarbageCollection gc.Config
130
131	ExpiredDeletion expireddeletion.Config
132	ZombieDeletion  zombiedeletion.Config
133
134	Tally            tally.Config
135	Rollup           rollup.Config
136	RollupArchive    rolluparchive.Config
137	LiveAccounting   live.Config
138	ProjectBWCleanup projectbwcleanup.Config
139
140	Mail mailservice.Config
141
142	Payments paymentsconfig.Config
143
144	Console consoleweb.Config
145
146	Version version_checker.Config
147
148	GracefulExit gracefulexit.Config
149
150	Metrics metrics.Config
151
152	Compensation compensation.Config
153
154	ProjectLimit accounting.ProjectLimitConfig
155
156	Analytics analytics.Config
157}
158