report.rb 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. class Report
  2. def self.enabled?
  3. Setting.get('es_url').present?
  4. end
  5. def self.config
  6. config = {}
  7. config[:metric] = {}
  8. config[:metric][:count] = {
  9. name: 'count',
  10. display: 'Ticket Count',
  11. default: true,
  12. prio: 10_000,
  13. }
  14. backend = [
  15. {
  16. name: 'created',
  17. display: 'Created',
  18. selected: true,
  19. dataDownload: true,
  20. adapter: Report::TicketGenericTime,
  21. params: { field: 'created_at' },
  22. condition: {
  23. 'state' => {
  24. 'operator' => 'is not',
  25. 'value' => 'merged'
  26. }
  27. }
  28. },
  29. {
  30. name: 'closed',
  31. display: 'Closed',
  32. selected: true,
  33. dataDownload: true,
  34. adapter: Report::TicketGenericTime,
  35. params: { field: 'close_at' },
  36. condition: {
  37. 'state' => {
  38. 'operator' => 'is not',
  39. 'value' => 'merged'
  40. }
  41. }
  42. },
  43. {
  44. name: 'backlog',
  45. display: 'Backlog',
  46. selected: true,
  47. dataDownload: false,
  48. adapter: Report::TicketBacklog,
  49. condition: {
  50. 'state' => {
  51. 'operator' => 'is not',
  52. 'value' => 'merged'
  53. }
  54. }
  55. },
  56. {
  57. name: 'first_solution',
  58. display: 'First Solution',
  59. selected: false,
  60. dataDownload: true,
  61. adapter: Report::TicketFirstSolution,
  62. condition: {
  63. 'ticket_state.name' => {
  64. 'operator' => 'is not',
  65. 'value' => 'merged'
  66. }
  67. }
  68. },
  69. {
  70. name: 'reopened',
  71. display: 'Reopened',
  72. selected: false,
  73. dataDownload: true,
  74. adapter: Report::TicketReopened,
  75. condition: {
  76. 'ticket_state.name' => {
  77. 'operator' => 'is not',
  78. 'value' => 'merged'
  79. }
  80. }
  81. },
  82. {
  83. name: 'movedin',
  84. display: 'Moved in',
  85. selected: false,
  86. dataDownload: true,
  87. adapter: Report::TicketMoved,
  88. params: { type: 'in' },
  89. condition: {
  90. 'ticket_state.name' => {
  91. 'operator' => 'is not',
  92. 'value' => 'merged'
  93. }
  94. }
  95. },
  96. {
  97. name: 'movedout',
  98. display: 'Moved out',
  99. selected: false,
  100. dataDownload: true,
  101. adapter: Report::TicketMoved,
  102. params: { type: 'out' },
  103. condition: {
  104. 'ticket_state.name' => {
  105. 'operator' => 'is not',
  106. 'value' => 'merged'
  107. }
  108. }
  109. },
  110. ]
  111. config[:metric][:count][:backend] = backend
  112. config[:metric][:create_channels] = {
  113. name: 'create_channels',
  114. display: 'Create Channels',
  115. prio: 9000,
  116. }
  117. backend = [
  118. {
  119. name: 'phone_in',
  120. display: 'Phone (in)',
  121. selected: true,
  122. dataDownload: true,
  123. adapter: Report::TicketGenericTime,
  124. params: {
  125. field: 'created_at',
  126. selector: {
  127. 'create_article_type_id' => {
  128. 'operator' => 'is',
  129. 'value' => Ticket::Article::Type.lookup(name: 'phone').id,
  130. },
  131. 'create_article_sender_id' => {
  132. 'operator' => 'is',
  133. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  134. },
  135. },
  136. },
  137. },
  138. {
  139. name: 'phone_out',
  140. display: 'Phone (out)',
  141. selected: true,
  142. dataDownload: true,
  143. adapter: Report::TicketGenericTime,
  144. params: {
  145. field: 'created_at',
  146. selector: {
  147. 'create_article_type_id' => {
  148. 'operator' => 'is',
  149. 'value' => Ticket::Article::Type.lookup(name: 'phone').id,
  150. },
  151. 'create_article_sender_id' => {
  152. 'operator' => 'is',
  153. 'value' => Ticket::Article::Sender.lookup(name: 'Agent').id,
  154. },
  155. }
  156. },
  157. },
  158. {
  159. name: 'email_in',
  160. display: 'Email (in)',
  161. selected: true,
  162. dataDownload: true,
  163. adapter: Report::TicketGenericTime,
  164. params: {
  165. field: 'created_at',
  166. selector: {
  167. 'create_article_type_id' => {
  168. 'operator' => 'is',
  169. 'value' => Ticket::Article::Type.lookup(name: 'email').id,
  170. },
  171. 'create_article_sender_id' => {
  172. 'operator' => 'is',
  173. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  174. },
  175. },
  176. },
  177. },
  178. {
  179. name: 'email_out',
  180. display: 'Email (out)',
  181. selected: true,
  182. dataDownload: true,
  183. adapter: Report::TicketGenericTime,
  184. params: {
  185. field: 'created_at',
  186. selector: {
  187. 'create_article_type_id' => {
  188. 'operator' => 'is',
  189. 'value' => Ticket::Article::Type.lookup(name: 'email').id,
  190. },
  191. 'create_article_sender_id' => {
  192. 'operator' => 'is',
  193. 'value' => Ticket::Article::Sender.lookup(name: 'Agent').id,
  194. },
  195. },
  196. },
  197. },
  198. {
  199. name: 'web_in',
  200. display: 'Web (in)',
  201. selected: true,
  202. dataDownload: true,
  203. adapter: Report::TicketGenericTime,
  204. params: {
  205. field: 'created_at',
  206. selector: {
  207. 'create_article_type_id' => {
  208. 'operator' => 'is',
  209. 'value' => Ticket::Article::Type.lookup(name: 'web').id,
  210. },
  211. 'create_article_sender_id' => {
  212. 'operator' => 'is',
  213. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  214. },
  215. },
  216. },
  217. },
  218. {
  219. name: 'twitter_in',
  220. display: 'Twitter (in)',
  221. selected: true,
  222. dataDownload: true,
  223. adapter: Report::TicketGenericTime,
  224. params: {
  225. field: 'created_at',
  226. selector: {
  227. 'create_article_type_id' => {
  228. 'operator' => 'is',
  229. 'value' => Ticket::Article::Type.lookup(name: 'twitter status').id,
  230. },
  231. 'create_article_sender_id' => {
  232. 'operator' => 'is',
  233. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  234. },
  235. },
  236. },
  237. },
  238. {
  239. name: 'twitter_out',
  240. display: 'Twitter (out)',
  241. selected: true,
  242. dataDownload: true,
  243. adapter: Report::TicketGenericTime,
  244. params: {
  245. field: 'created_at',
  246. selector: {
  247. 'create_article_type_id' => {
  248. 'operator' => 'is',
  249. 'value' => Ticket::Article::Type.lookup(name: 'twitter status').id,
  250. },
  251. 'create_article_sender_id' => {
  252. 'operator' => 'is',
  253. 'value' => Ticket::Article::Sender.lookup(name: 'Agent').id,
  254. },
  255. },
  256. },
  257. },
  258. ]
  259. config[:metric][:create_channels][:backend] = backend
  260. config[:metric][:communication] = {
  261. name: 'communication',
  262. display: 'Communication',
  263. prio: 7000,
  264. }
  265. backend = [
  266. {
  267. name: 'phone_in',
  268. display: 'Phone (in)',
  269. selected: true,
  270. dataDownload: false,
  271. adapter: Report::ArticleByTypeSender,
  272. params: {
  273. type: 'phone',
  274. sender: 'Customer',
  275. },
  276. },
  277. {
  278. name: 'phone_out',
  279. display: 'Phone (out)',
  280. selected: true,
  281. dataDownload: false,
  282. adapter: Report::ArticleByTypeSender,
  283. params: {
  284. type: 'phone',
  285. sender: 'Agent',
  286. },
  287. },
  288. {
  289. name: 'email_in',
  290. display: 'Email (in)',
  291. selected: true,
  292. dataDownload: false,
  293. adapter: Report::ArticleByTypeSender,
  294. params: {
  295. type: 'email',
  296. sender: 'Customer',
  297. },
  298. },
  299. {
  300. name: 'email_out',
  301. display: 'Email (out)',
  302. selected: true,
  303. dataDownload: false,
  304. adapter: Report::ArticleByTypeSender,
  305. params: {
  306. type: 'email',
  307. sender: 'Agent',
  308. },
  309. },
  310. {
  311. name: 'web_in',
  312. display: 'Web (in)',
  313. selected: true,
  314. dataDownload: false,
  315. adapter: Report::ArticleByTypeSender,
  316. params: {
  317. type: 'web',
  318. sender: 'Customer',
  319. },
  320. },
  321. {
  322. name: 'twitter_in',
  323. display: 'Twitter (in)',
  324. selected: true,
  325. dataDownload: false,
  326. adapter: Report::ArticleByTypeSender,
  327. params: {
  328. type: 'twitter status',
  329. sender: 'Customer',
  330. },
  331. },
  332. {
  333. name: 'twitter_out',
  334. display: 'Twitter (out)',
  335. selected: true,
  336. dataDownload: false,
  337. adapter: Report::ArticleByTypeSender,
  338. params: {
  339. type: 'twitter status',
  340. sender: 'Agent',
  341. },
  342. },
  343. ]
  344. config[:metric][:communication][:backend] = backend
  345. config[:metric].each do |metric_key, metric_value|
  346. metric_value[:backend].each do |metric_backend|
  347. metric_backend[:name] = "#{metric_key}::#{metric_backend[:name]}"
  348. end
  349. end
  350. config
  351. end
  352. end