You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

collector.go 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. // Copyright 2018 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package metrics
  5. import (
  6. "code.gitea.io/gitea/models"
  7. "github.com/prometheus/client_golang/prometheus"
  8. )
  9. const namespace = "gitea_"
  10. // Collector implements the prometheus.Collector interface and
  11. // exposes gitea metrics for prometheus
  12. type Collector struct {
  13. Accesses *prometheus.Desc
  14. Actions *prometheus.Desc
  15. Attachments *prometheus.Desc
  16. Comments *prometheus.Desc
  17. Follows *prometheus.Desc
  18. HookTasks *prometheus.Desc
  19. Issues *prometheus.Desc
  20. IssuesOpen *prometheus.Desc
  21. IssuesClosed *prometheus.Desc
  22. IssuesByLabel *prometheus.Desc
  23. IssuesByRepository *prometheus.Desc
  24. Labels *prometheus.Desc
  25. LoginSources *prometheus.Desc
  26. Milestones *prometheus.Desc
  27. Mirrors *prometheus.Desc
  28. Oauths *prometheus.Desc
  29. Organizations *prometheus.Desc
  30. Projects *prometheus.Desc
  31. ProjectBoards *prometheus.Desc
  32. PublicKeys *prometheus.Desc
  33. Releases *prometheus.Desc
  34. Repositories *prometheus.Desc
  35. Stars *prometheus.Desc
  36. Teams *prometheus.Desc
  37. UpdateTasks *prometheus.Desc
  38. Users *prometheus.Desc
  39. Watches *prometheus.Desc
  40. Webhooks *prometheus.Desc
  41. }
  42. // NewCollector returns a new Collector with all prometheus.Desc initialized
  43. func NewCollector() Collector {
  44. return Collector{
  45. Accesses: prometheus.NewDesc(
  46. namespace+"accesses",
  47. "Number of Accesses",
  48. nil, nil,
  49. ),
  50. Actions: prometheus.NewDesc(
  51. namespace+"actions",
  52. "Number of Actions",
  53. nil, nil,
  54. ),
  55. Attachments: prometheus.NewDesc(
  56. namespace+"attachments",
  57. "Number of Attachments",
  58. nil, nil,
  59. ),
  60. Comments: prometheus.NewDesc(
  61. namespace+"comments",
  62. "Number of Comments",
  63. nil, nil,
  64. ),
  65. Follows: prometheus.NewDesc(
  66. namespace+"follows",
  67. "Number of Follows",
  68. nil, nil,
  69. ),
  70. HookTasks: prometheus.NewDesc(
  71. namespace+"hooktasks",
  72. "Number of HookTasks",
  73. nil, nil,
  74. ),
  75. Issues: prometheus.NewDesc(
  76. namespace+"issues",
  77. "Number of Issues",
  78. nil, nil,
  79. ),
  80. IssuesByLabel: prometheus.NewDesc(
  81. namespace+"issues_by_label",
  82. "Number of Issues",
  83. []string{"label"}, nil,
  84. ),
  85. IssuesByRepository: prometheus.NewDesc(
  86. namespace+"issues_by_repository",
  87. "Number of Issues",
  88. []string{"repository"}, nil,
  89. ),
  90. IssuesOpen: prometheus.NewDesc(
  91. namespace+"issues_open",
  92. "Number of open Issues",
  93. nil, nil,
  94. ),
  95. IssuesClosed: prometheus.NewDesc(
  96. namespace+"issues_closed",
  97. "Number of closed Issues",
  98. nil, nil,
  99. ),
  100. Labels: prometheus.NewDesc(
  101. namespace+"labels",
  102. "Number of Labels",
  103. nil, nil,
  104. ),
  105. LoginSources: prometheus.NewDesc(
  106. namespace+"loginsources",
  107. "Number of LoginSources",
  108. nil, nil,
  109. ),
  110. Milestones: prometheus.NewDesc(
  111. namespace+"milestones",
  112. "Number of Milestones",
  113. nil, nil,
  114. ),
  115. Mirrors: prometheus.NewDesc(
  116. namespace+"mirrors",
  117. "Number of Mirrors",
  118. nil, nil,
  119. ),
  120. Oauths: prometheus.NewDesc(
  121. namespace+"oauths",
  122. "Number of Oauths",
  123. nil, nil,
  124. ),
  125. Organizations: prometheus.NewDesc(
  126. namespace+"organizations",
  127. "Number of Organizations",
  128. nil, nil,
  129. ),
  130. Projects: prometheus.NewDesc(
  131. namespace+"projects",
  132. "Number of projects",
  133. nil, nil,
  134. ),
  135. ProjectBoards: prometheus.NewDesc(
  136. namespace+"projects_boards",
  137. "Number of project boards",
  138. nil, nil,
  139. ),
  140. PublicKeys: prometheus.NewDesc(
  141. namespace+"publickeys",
  142. "Number of PublicKeys",
  143. nil, nil,
  144. ),
  145. Releases: prometheus.NewDesc(
  146. namespace+"releases",
  147. "Number of Releases",
  148. nil, nil,
  149. ),
  150. Repositories: prometheus.NewDesc(
  151. namespace+"repositories",
  152. "Number of Repositories",
  153. nil, nil,
  154. ),
  155. Stars: prometheus.NewDesc(
  156. namespace+"stars",
  157. "Number of Stars",
  158. nil, nil,
  159. ),
  160. Teams: prometheus.NewDesc(
  161. namespace+"teams",
  162. "Number of Teams",
  163. nil, nil,
  164. ),
  165. UpdateTasks: prometheus.NewDesc(
  166. namespace+"updatetasks",
  167. "Number of UpdateTasks",
  168. nil, nil,
  169. ),
  170. Users: prometheus.NewDesc(
  171. namespace+"users",
  172. "Number of Users",
  173. nil, nil,
  174. ),
  175. Watches: prometheus.NewDesc(
  176. namespace+"watches",
  177. "Number of Watches",
  178. nil, nil,
  179. ),
  180. Webhooks: prometheus.NewDesc(
  181. namespace+"webhooks",
  182. "Number of Webhooks",
  183. nil, nil,
  184. ),
  185. }
  186. }
  187. // Describe returns all possible prometheus.Desc
  188. func (c Collector) Describe(ch chan<- *prometheus.Desc) {
  189. ch <- c.Accesses
  190. ch <- c.Actions
  191. ch <- c.Attachments
  192. ch <- c.Comments
  193. ch <- c.Follows
  194. ch <- c.HookTasks
  195. ch <- c.Issues
  196. ch <- c.IssuesByLabel
  197. ch <- c.IssuesByRepository
  198. ch <- c.IssuesOpen
  199. ch <- c.IssuesClosed
  200. ch <- c.Labels
  201. ch <- c.LoginSources
  202. ch <- c.Milestones
  203. ch <- c.Mirrors
  204. ch <- c.Oauths
  205. ch <- c.Organizations
  206. ch <- c.Projects
  207. ch <- c.ProjectBoards
  208. ch <- c.PublicKeys
  209. ch <- c.Releases
  210. ch <- c.Repositories
  211. ch <- c.Stars
  212. ch <- c.Teams
  213. ch <- c.UpdateTasks
  214. ch <- c.Users
  215. ch <- c.Watches
  216. ch <- c.Webhooks
  217. }
  218. // Collect returns the metrics with values
  219. func (c Collector) Collect(ch chan<- prometheus.Metric) {
  220. stats := models.GetStatistic()
  221. ch <- prometheus.MustNewConstMetric(
  222. c.Accesses,
  223. prometheus.GaugeValue,
  224. float64(stats.Counter.Access),
  225. )
  226. ch <- prometheus.MustNewConstMetric(
  227. c.Actions,
  228. prometheus.GaugeValue,
  229. float64(stats.Counter.Action),
  230. )
  231. ch <- prometheus.MustNewConstMetric(
  232. c.Attachments,
  233. prometheus.GaugeValue,
  234. float64(stats.Counter.Attachment),
  235. )
  236. ch <- prometheus.MustNewConstMetric(
  237. c.Comments,
  238. prometheus.GaugeValue,
  239. float64(stats.Counter.Comment),
  240. )
  241. ch <- prometheus.MustNewConstMetric(
  242. c.Follows,
  243. prometheus.GaugeValue,
  244. float64(stats.Counter.Follow),
  245. )
  246. ch <- prometheus.MustNewConstMetric(
  247. c.HookTasks,
  248. prometheus.GaugeValue,
  249. float64(stats.Counter.HookTask),
  250. )
  251. ch <- prometheus.MustNewConstMetric(
  252. c.Issues,
  253. prometheus.GaugeValue,
  254. float64(stats.Counter.Issue),
  255. )
  256. for _, il := range stats.Counter.IssueByLabel {
  257. ch <- prometheus.MustNewConstMetric(
  258. c.IssuesByLabel,
  259. prometheus.GaugeValue,
  260. float64(il.Count),
  261. il.Label,
  262. )
  263. }
  264. for _, ir := range stats.Counter.IssueByRepository {
  265. ch <- prometheus.MustNewConstMetric(
  266. c.IssuesByRepository,
  267. prometheus.GaugeValue,
  268. float64(ir.Count),
  269. ir.OwnerName+"/"+ir.Repository,
  270. )
  271. }
  272. ch <- prometheus.MustNewConstMetric(
  273. c.IssuesClosed,
  274. prometheus.GaugeValue,
  275. float64(stats.Counter.IssueClosed),
  276. )
  277. ch <- prometheus.MustNewConstMetric(
  278. c.IssuesOpen,
  279. prometheus.GaugeValue,
  280. float64(stats.Counter.IssueOpen),
  281. )
  282. ch <- prometheus.MustNewConstMetric(
  283. c.Labels,
  284. prometheus.GaugeValue,
  285. float64(stats.Counter.Label),
  286. )
  287. ch <- prometheus.MustNewConstMetric(
  288. c.LoginSources,
  289. prometheus.GaugeValue,
  290. float64(stats.Counter.AuthSource),
  291. )
  292. ch <- prometheus.MustNewConstMetric(
  293. c.Milestones,
  294. prometheus.GaugeValue,
  295. float64(stats.Counter.Milestone),
  296. )
  297. ch <- prometheus.MustNewConstMetric(
  298. c.Mirrors,
  299. prometheus.GaugeValue,
  300. float64(stats.Counter.Mirror),
  301. )
  302. ch <- prometheus.MustNewConstMetric(
  303. c.Oauths,
  304. prometheus.GaugeValue,
  305. float64(stats.Counter.Oauth),
  306. )
  307. ch <- prometheus.MustNewConstMetric(
  308. c.Organizations,
  309. prometheus.GaugeValue,
  310. float64(stats.Counter.Org),
  311. )
  312. ch <- prometheus.MustNewConstMetric(
  313. c.Projects,
  314. prometheus.GaugeValue,
  315. float64(stats.Counter.Project),
  316. )
  317. ch <- prometheus.MustNewConstMetric(
  318. c.ProjectBoards,
  319. prometheus.GaugeValue,
  320. float64(stats.Counter.ProjectBoard),
  321. )
  322. ch <- prometheus.MustNewConstMetric(
  323. c.PublicKeys,
  324. prometheus.GaugeValue,
  325. float64(stats.Counter.PublicKey),
  326. )
  327. ch <- prometheus.MustNewConstMetric(
  328. c.Releases,
  329. prometheus.GaugeValue,
  330. float64(stats.Counter.Release),
  331. )
  332. ch <- prometheus.MustNewConstMetric(
  333. c.Repositories,
  334. prometheus.GaugeValue,
  335. float64(stats.Counter.Repo),
  336. )
  337. ch <- prometheus.MustNewConstMetric(
  338. c.Stars,
  339. prometheus.GaugeValue,
  340. float64(stats.Counter.Star),
  341. )
  342. ch <- prometheus.MustNewConstMetric(
  343. c.Teams,
  344. prometheus.GaugeValue,
  345. float64(stats.Counter.Team),
  346. )
  347. ch <- prometheus.MustNewConstMetric(
  348. c.UpdateTasks,
  349. prometheus.GaugeValue,
  350. float64(stats.Counter.UpdateTask),
  351. )
  352. ch <- prometheus.MustNewConstMetric(
  353. c.Users,
  354. prometheus.GaugeValue,
  355. float64(stats.Counter.User),
  356. )
  357. ch <- prometheus.MustNewConstMetric(
  358. c.Watches,
  359. prometheus.GaugeValue,
  360. float64(stats.Counter.Watch),
  361. )
  362. ch <- prometheus.MustNewConstMetric(
  363. c.Webhooks,
  364. prometheus.GaugeValue,
  365. float64(stats.Counter.Webhook),
  366. )
  367. }