event_counter.c 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * Copyright (C) 2016 Christian Franke
  3. *
  4. * This file is part of Quagga.
  5. *
  6. * Permission is hereby granted, free of charge, to any person obtaining a
  7. * copy of this software and associated documentation files (the "Software"),
  8. * to deal in the Software without restriction, including without limitation
  9. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  10. * and/or sell copies of the Software, and to permit persons to whom the
  11. * Software is furnished to do so, subject to the following conditions:
  12. *
  13. * The above copyright notice and this permission notice (including the next
  14. * paragraph) shall be included in all copies or substantial portions of the
  15. * Software.
  16. *
  17. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  18. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  20. * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  21. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  22. * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  23. * DEALINGS IN THE SOFTWARE.
  24. *
  25. * Alternatively, you can use, redistribute and/or modify it under the
  26. * following terms:
  27. *
  28. * Quagga is free software; you can redistribute it and/or modify it
  29. * under the terms of the GNU General Public License as published by the
  30. * Free Software Foundation; either version 2, or (at your option) any
  31. * later version.
  32. *
  33. * Quagga is distributed in the hope that it will be useful, but
  34. * WITHOUT ANY WARRANTY; without even the implied warranty of
  35. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  36. * General Public License for more details.
  37. *
  38. * You should have received a copy of the GNU General Public License
  39. * along with Quagga; see the file COPYING. If not, write to the Free
  40. * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  41. * 02111-1307, USA.
  42. */
  43. #include <zebra.h>
  44. #include "event_counter.h"
  45. void
  46. event_counter_inc (struct event_counter *counter)
  47. {
  48. counter->count++;
  49. counter->last = time (NULL);
  50. }
  51. const char *
  52. event_counter_format (const struct event_counter *counter)
  53. {
  54. struct tm last_change_store;
  55. struct tm *last_change;
  56. char timebuf[sizeof ("Thu, 01 Jan 1970 00:00:00 +0000")];
  57. static char rv[20 + sizeof (" last: ") + sizeof (timebuf)];
  58. last_change = localtime_r (&counter->last, &last_change_store);
  59. if (!last_change || strftime (timebuf, sizeof (timebuf),
  60. "%a, %d %b %Y %T %z", last_change) == 0)
  61. {
  62. strncpy (timebuf, "???", sizeof (timebuf));
  63. }
  64. snprintf (rv, sizeof (rv), "%5llu last: %s", counter->count,
  65. counter->last ? timebuf : "(never)");
  66. return rv;
  67. }