dispatcher.rs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. use crate::{cmd, connection::Connection, dispatcher, error::Error, value::Value};
  2. use bytes::Bytes;
  3. use std::convert::TryInto;
  4. use std::time::SystemTime;
  5. use std::time::UNIX_EPOCH;
  6. fn do_time(_conn: &Connection, _args: &[Bytes]) -> Result<Value, Error> {
  7. let now = SystemTime::now();
  8. let since_the_epoch = now.duration_since(UNIX_EPOCH).expect("Time went backwards");
  9. let seconds = format!("{}", since_the_epoch.as_secs());
  10. let millis = format!("{}", since_the_epoch.subsec_millis());
  11. Ok(vec![seconds.as_str(), millis.as_str()].into())
  12. }
  13. fn do_command(_conn: &Connection, _args: &[Bytes]) -> Result<Value, Error> {
  14. let now = SystemTime::now();
  15. let since_the_epoch = now.duration_since(UNIX_EPOCH).expect("Time went backwards");
  16. let in_ms: i128 =
  17. since_the_epoch.as_secs() as i128 * 1000 + since_the_epoch.subsec_millis() as i128;
  18. Ok(format!("{}", in_ms).as_str().into())
  19. }
  20. dispatcher! {
  21. command {
  22. do_command,
  23. ["random" "loading" "stale"],
  24. 1,
  25. },
  26. client {
  27. cmd::client::client,
  28. ["random" "loading" "stale"],
  29. -2,
  30. },
  31. decr {
  32. cmd::string::decr,
  33. ["write" "denyoom" "fast"],
  34. 2,
  35. },
  36. echo {
  37. cmd::client::echo,
  38. ["random" "loading" "stale"],
  39. 2,
  40. },
  41. expire {
  42. cmd::key::expire,
  43. ["read" "write" "fast"],
  44. 3,
  45. },
  46. expireat {
  47. cmd::key::expire_at,
  48. ["read" "write" "fast"],
  49. 3,
  50. },
  51. expiretime {
  52. cmd::key::expire_time,
  53. ["read" "write" "fast"],
  54. 2,
  55. },
  56. del {
  57. cmd::key::del,
  58. ["random" "loading" "stale"],
  59. -2,
  60. },
  61. get {
  62. cmd::string::get,
  63. ["random" "loading" "stale"],
  64. 2,
  65. },
  66. incr {
  67. cmd::string::incr,
  68. ["write" "denyoom" "fast"],
  69. 2,
  70. },
  71. incrby {
  72. cmd::string::incr_by,
  73. ["write" "denyoom" "fast"],
  74. 3,
  75. },
  76. persist {
  77. cmd::key::persist,
  78. ["write" "fast"],
  79. 2,
  80. },
  81. ttl {
  82. cmd::key::ttl,
  83. ["read" "read"],
  84. 2,
  85. },
  86. pexpire {
  87. cmd::key::expire,
  88. ["read" "write" "fast"],
  89. 3,
  90. },
  91. pexpireat {
  92. cmd::key::expire_at,
  93. ["read" "write" "fast"],
  94. 3,
  95. },
  96. pexpiretime {
  97. cmd::key::expire_time,
  98. ["read" "write" "fast"],
  99. 2,
  100. },
  101. pttl {
  102. cmd::key::ttl,
  103. ["read" "read"],
  104. 2,
  105. },
  106. set {
  107. cmd::string::set,
  108. ["random" "loading" "stale"],
  109. -3,
  110. },
  111. getset {
  112. cmd::string::getset,
  113. ["random" "loading" "stale"],
  114. -3,
  115. },
  116. ping {
  117. cmd::client::ping,
  118. ["random" "loading" "stale"],
  119. -1,
  120. },
  121. time {
  122. do_time,
  123. ["random" "loading" "stale"],
  124. 1,
  125. },
  126. }