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.

132 lines
3.5KB

  1. //! Tools to record and display what's happening in your program
  2. //!
  3. #![feature(test)]
  4. #[macro_use] extern crate slog;
  5. #[allow(unused_imports)]
  6. #[macro_use] extern crate money;
  7. extern crate test;
  8. extern crate influent;
  9. extern crate chrono;
  10. extern crate hyper;
  11. extern crate termion;
  12. extern crate sloggers;
  13. extern crate slog_term;
  14. extern crate slog_async;
  15. extern crate fnv;
  16. extern crate ordermap;
  17. extern crate decimal;
  18. extern crate uuid;
  19. extern crate hdrhistogram;
  20. extern crate smallvec;
  21. extern crate num;
  22. extern crate dirs;
  23. extern crate crossbeam_channel;
  24. #[cfg(feature = "zmq")]
  25. extern crate zmq;
  26. #[cfg(feature = "latency")]
  27. extern crate pubsub as pub_sub;
  28. use std::time::Duration;
  29. use chrono::{DateTime, Utc, TimeZone as ChronoTZ};
  30. #[allow(unused_imports)]
  31. use sloggers::Build;
  32. #[allow(unused_imports)]
  33. pub use sloggers::types::Severity;
  34. use sloggers::types::TimeZone;
  35. #[allow(unused_imports)]
  36. use sloggers::file::FileLoggerBuilder;
  37. use slog::Drain;
  38. use uuid::Uuid;
  39. pub mod influx;
  40. #[cfg(feature = "warnings")]
  41. pub mod warnings;
  42. #[cfg(feature = "latency")]
  43. pub mod latency;
  44. pub mod hist;
  45. #[cfg(feature = "trace")]
  46. pub const LOG_LEVEL: Severity = Severity::Trace;
  47. #[cfg(all(feature = "debug", not(feature = "trace")))]
  48. pub const LOG_LEVEL: Severity = Severity::Debug;
  49. #[cfg(not(any(feature = "debug", feature = "trace")))]
  50. pub const LOG_LEVEL: Severity = Severity::Info;
  51. #[cfg(not(feature = "trace"))]
  52. const CHANNEL_SIZE: usize = 32_768;
  53. #[cfg(feature = "trace")]
  54. const CHANNEL_SIZE: usize = 2_097_152;
  55. /// converts a chrono::DateTime to an integer timestamp (ns)
  56. ///
  57. #[inline]
  58. pub fn nanos(t: DateTime<Utc>) -> u64 {
  59. (t.timestamp() as u64) * 1_000_000_000_u64 + (t.timestamp_subsec_nanos() as u64)
  60. }
  61. #[inline]
  62. pub fn secs(d: Duration) -> f64 {
  63. d.as_secs() as f64 + d.subsec_nanos() as f64 / 1_000_000_000_f64
  64. }
  65. #[inline]
  66. pub fn inanos(t: DateTime<Utc>) -> i64 {
  67. t.timestamp() * 1_000_000_000i64 + t.timestamp_subsec_nanos() as i64
  68. }
  69. //#[cfg(not(any(test, feature = "test")))]
  70. pub fn file_logger(path: &str, level: Severity) -> slog::Logger {
  71. let mut builder = FileLoggerBuilder::new(path);
  72. builder.level(level);
  73. builder.timezone(TimeZone::Utc);
  74. builder.channel_size(CHANNEL_SIZE);
  75. builder.build().unwrap()
  76. }
  77. pub fn truncating_file_logger(path: &str, level: Severity) -> slog::Logger {
  78. let mut builder = FileLoggerBuilder::new(path);
  79. builder.level(level);
  80. builder.timezone(TimeZone::Utc);
  81. builder.truncate();
  82. builder.channel_size(CHANNEL_SIZE);
  83. builder.build().unwrap()
  84. }
  85. #[deprecated(since="0.4.0", note="Turns out the file logger in sloggers uses async, \
  86. making the async here duplicative")]
  87. pub fn async_file_logger(path: &str, level: Severity) -> slog::Logger {
  88. let drain = file_logger(path, level);
  89. let async_drain =
  90. slog_async::Async::new(drain)
  91. .chan_size(100_000)
  92. .build();
  93. slog::Logger::root(async_drain.fuse(), o!())
  94. }
  95. //#[deprecated(since="0.4.3", note="Use `nanos(DateTime<Utc>) -> u64` instead")]
  96. pub fn dt_nanos(t: DateTime<Utc>) -> i64 {
  97. (t.timestamp() as i64) * 1_000_000_000_i64 + (t.timestamp_subsec_nanos() as i64)
  98. }
  99. #[inline]
  100. pub fn dur_nanos(d: ::std::time::Duration) -> i64 {
  101. (d.as_secs() * 1_000_000_000_u64 + (d.subsec_nanos() as u64)) as i64
  102. }
  103. #[inline]
  104. pub fn nanos_utc(t: i64) -> DateTime<Utc> {
  105. Utc.timestamp(t / 1_000_000_000, (t % 1_000_000_000) as u32)
  106. }
  107. pub fn short_uuid(id: &Uuid) -> String {
  108. if cfg!(feature = "disable-short-uuid") {
  109. id.to_string()
  110. } else {
  111. format!("{}", &id.to_string()[..8])
  112. }
  113. }