disk.service.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. const diskModel = require('../model/disk.model')
  2. const moment = require('moment')
  3. const dataMoment = (date) => {
  4. const arrayDate = (date || moment().add(-1, 'day').format('YYYY-MM-DD')).split('-')
  5. switch (arrayDate.length) {
  6. case 3:
  7. return {
  8. year: arrayDate[0],
  9. month: arrayDate[1],
  10. day: arrayDate[2],
  11. unitOfTime: 'day'
  12. }
  13. case 2:
  14. return {
  15. year: arrayDate[0],
  16. month: arrayDate[1],
  17. unitOfTime: 'month'
  18. }
  19. default:
  20. return {
  21. year: arrayDate[0],
  22. unitOfTime: 'year'
  23. }
  24. }
  25. }
  26. exports.getData = async (date) => {
  27. const { year, month, day, unitOfTime } = dataMoment(date)
  28. const kalender = moment()
  29. if (day) kalender.set('date', +day)
  30. if (month) kalender.set('month', +month - 1)
  31. if (year) kalender.set('year', +year)
  32. console.log(kalender.startOf(unitOfTime).toISOString(), kalender.endOf(unitOfTime).toISOString())
  33. const data = await diskModel.aggregate([
  34. {
  35. $match: {
  36. timestamp: {
  37. $gte: kalender.startOf(unitOfTime).toDate(),
  38. $lt: kalender.endOf(unitOfTime).toDate()
  39. },
  40. mounted_on: '/'
  41. }
  42. },
  43. {
  44. $group: {
  45. _id: { $dateToString: { format: '%Y-%m-%d', date: '$timestamp' } },
  46. data: { $push: '$$ROOT' }
  47. }
  48. },
  49. {
  50. $unwind: {
  51. path: '$data'
  52. }
  53. }
  54. ]).exec()
  55. return data.map(({ _id, data }) => ({
  56. date: _id,
  57. size: data.size,
  58. used: data.used,
  59. available: data.available,
  60. use_percent: data.use_percent,
  61. timestamp: data.timestamp,
  62. }))
  63. }