1// Copyright 2018 The Prometheus Authors
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6// http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13
14// Package nfs implements parsing of /proc/net/rpc/nfsd.
15// Fields are documented in https://www.svennd.be/nfsd-stats-explained-procnetrpcnfsd/
16package nfs
17
18// ReplyCache models the "rc" line.
19type ReplyCache struct {
20	Hits    uint64
21	Misses  uint64
22	NoCache uint64
23}
24
25// FileHandles models the "fh" line.
26type FileHandles struct {
27	Stale        uint64
28	TotalLookups uint64
29	AnonLookups  uint64
30	DirNoCache   uint64
31	NoDirNoCache uint64
32}
33
34// InputOutput models the "io" line.
35type InputOutput struct {
36	Read  uint64
37	Write uint64
38}
39
40// Threads models the "th" line.
41type Threads struct {
42	Threads uint64
43	FullCnt uint64
44}
45
46// ReadAheadCache models the "ra" line.
47type ReadAheadCache struct {
48	CacheSize      uint64
49	CacheHistogram []uint64
50	NotFound       uint64
51}
52
53// Network models the "net" line.
54type Network struct {
55	NetCount   uint64
56	UDPCount   uint64
57	TCPCount   uint64
58	TCPConnect uint64
59}
60
61// ClientRPC models the nfs "rpc" line.
62type ClientRPC struct {
63	RPCCount        uint64
64	Retransmissions uint64
65	AuthRefreshes   uint64
66}
67
68// ServerRPC models the nfsd "rpc" line.
69type ServerRPC struct {
70	RPCCount uint64
71	BadCnt   uint64
72	BadFmt   uint64
73	BadAuth  uint64
74	BadcInt  uint64
75}
76
77// V2Stats models the "proc2" line.
78type V2Stats struct {
79	Null     uint64
80	GetAttr  uint64
81	SetAttr  uint64
82	Root     uint64
83	Lookup   uint64
84	ReadLink uint64
85	Read     uint64
86	WrCache  uint64
87	Write    uint64
88	Create   uint64
89	Remove   uint64
90	Rename   uint64
91	Link     uint64
92	SymLink  uint64
93	MkDir    uint64
94	RmDir    uint64
95	ReadDir  uint64
96	FsStat   uint64
97}
98
99// V3Stats models the "proc3" line.
100type V3Stats struct {
101	Null        uint64
102	GetAttr     uint64
103	SetAttr     uint64
104	Lookup      uint64
105	Access      uint64
106	ReadLink    uint64
107	Read        uint64
108	Write       uint64
109	Create      uint64
110	MkDir       uint64
111	SymLink     uint64
112	MkNod       uint64
113	Remove      uint64
114	RmDir       uint64
115	Rename      uint64
116	Link        uint64
117	ReadDir     uint64
118	ReadDirPlus uint64
119	FsStat      uint64
120	FsInfo      uint64
121	PathConf    uint64
122	Commit      uint64
123}
124
125// ClientV4Stats models the nfs "proc4" line.
126type ClientV4Stats struct {
127	Null               uint64
128	Read               uint64
129	Write              uint64
130	Commit             uint64
131	Open               uint64
132	OpenConfirm        uint64
133	OpenNoattr         uint64
134	OpenDowngrade      uint64
135	Close              uint64
136	Setattr            uint64
137	FsInfo             uint64
138	Renew              uint64
139	SetClientID        uint64
140	SetClientIDConfirm uint64
141	Lock               uint64
142	Lockt              uint64
143	Locku              uint64
144	Access             uint64
145	Getattr            uint64
146	Lookup             uint64
147	LookupRoot         uint64
148	Remove             uint64
149	Rename             uint64
150	Link               uint64
151	Symlink            uint64
152	Create             uint64
153	Pathconf           uint64
154	StatFs             uint64
155	ReadLink           uint64
156	ReadDir            uint64
157	ServerCaps         uint64
158	DelegReturn        uint64
159	GetACL             uint64
160	SetACL             uint64
161	FsLocations        uint64
162	ReleaseLockowner   uint64
163	Secinfo            uint64
164	FsidPresent        uint64
165	ExchangeID         uint64
166	CreateSession      uint64
167	DestroySession     uint64
168	Sequence           uint64
169	GetLeaseTime       uint64
170	ReclaimComplete    uint64
171	LayoutGet          uint64
172	GetDeviceInfo      uint64
173	LayoutCommit       uint64
174	LayoutReturn       uint64
175	SecinfoNoName      uint64
176	TestStateID        uint64
177	FreeStateID        uint64
178	GetDeviceList      uint64
179	BindConnToSession  uint64
180	DestroyClientID    uint64
181	Seek               uint64
182	Allocate           uint64
183	DeAllocate         uint64
184	LayoutStats        uint64
185	Clone              uint64
186}
187
188// ServerV4Stats models the nfsd "proc4" line.
189type ServerV4Stats struct {
190	Null     uint64
191	Compound uint64
192}
193
194// V4Ops models the "proc4ops" line: NFSv4 operations
195// Variable list, see:
196// v4.0 https://tools.ietf.org/html/rfc3010 (38 operations)
197// v4.1 https://tools.ietf.org/html/rfc5661 (58 operations)
198// v4.2 https://tools.ietf.org/html/draft-ietf-nfsv4-minorversion2-41 (71 operations)
199type V4Ops struct {
200	//Values       uint64 // Variable depending on v4.x sub-version. TODO: Will this always at least include the fields in this struct?
201	Op0Unused    uint64
202	Op1Unused    uint64
203	Op2Future    uint64
204	Access       uint64
205	Close        uint64
206	Commit       uint64
207	Create       uint64
208	DelegPurge   uint64
209	DelegReturn  uint64
210	GetAttr      uint64
211	GetFH        uint64
212	Link         uint64
213	Lock         uint64
214	Lockt        uint64
215	Locku        uint64
216	Lookup       uint64
217	LookupRoot   uint64
218	Nverify      uint64
219	Open         uint64
220	OpenAttr     uint64
221	OpenConfirm  uint64
222	OpenDgrd     uint64
223	PutFH        uint64
224	PutPubFH     uint64
225	PutRootFH    uint64
226	Read         uint64
227	ReadDir      uint64
228	ReadLink     uint64
229	Remove       uint64
230	Rename       uint64
231	Renew        uint64
232	RestoreFH    uint64
233	SaveFH       uint64
234	SecInfo      uint64
235	SetAttr      uint64
236	Verify       uint64
237	Write        uint64
238	RelLockOwner uint64
239}
240
241// ClientRPCStats models all stats from /proc/net/rpc/nfs.
242type ClientRPCStats struct {
243	Network       Network
244	ClientRPC     ClientRPC
245	V2Stats       V2Stats
246	V3Stats       V3Stats
247	ClientV4Stats ClientV4Stats
248}
249
250// ServerRPCStats models all stats from /proc/net/rpc/nfsd.
251type ServerRPCStats struct {
252	ReplyCache     ReplyCache
253	FileHandles    FileHandles
254	InputOutput    InputOutput
255	Threads        Threads
256	ReadAheadCache ReadAheadCache
257	Network        Network
258	ServerRPC      ServerRPC
259	V2Stats        V2Stats
260	V3Stats        V3Stats
261	ServerV4Stats  ServerV4Stats
262	V4Ops          V4Ops
263}
264