switch to new MPL based Fraunhofer FOKUS Public License
[senf.git] / senf / Scheduler / EventManager.cc
1 // $Id$
2 //
3 // Copyright (C) 2008
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 //
6 // The contents of this file are subject to the Fraunhofer FOKUS Public License
7 // Version 1.0 (the "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at 
9 // http://senf.berlios.de/license.html
10 //
11 // The Fraunhofer FOKUS Public License Version 1.0 is based on, 
12 // but modifies the Mozilla Public License Version 1.1.
13 // See the full license text for the amendments.
14 //
15 // Software distributed under the License is distributed on an "AS IS" basis, 
16 // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
17 // for the specific language governing rights and limitations under the License.
18 //
19 // The Original Code is Fraunhofer FOKUS code.
20 //
21 // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. 
22 // (registered association), Hansastraße 27 c, 80686 Munich, Germany.
23 // All Rights Reserved.
24 //
25 // Contributor(s):
26 //   Stefan Bund <g0dil@berlios.de>
27
28 /** \file
29     \brief EventManager non-inline non-template implementation */
30
31 //#include "EventManager.hh"
32 //#include "EventManager.ih"
33
34 // Custom includes
35 #include <boost/format.hpp>
36 #include <senf/Utils/membind.hh>
37 #include <senf/Utils/Console/ScopedDirectory.hh>
38 #include <senf/Utils/Console/ParsedCommand.hh>
39 #include "ConsoleDir.hh"
40 #include "FIFORunner.hh"
41
42 //#include "EventManager.mpp"
43 #define prefix_
44 //-/////////////////////////////////////////////////////////////////////////////////////////////////
45
46 prefix_ senf::scheduler::detail::EventManager::EventManager()
47 {
48 #ifndef SENF_DISABLE_CONSOLE
49     consoleDir().add("events", console::factory::Command(
50             membind(&EventManager::listEvents, this))
51         .doc("List all scheduler events sorted by priority\n"
52              "\n"
53              "Columns:\n"
54              "    TP      event type:\n"
55              "              fd  file descriptor\n"
56              "              tm  timer\n"
57              "              si  UNIX signal\n"
58              "              ee  event hook\n"
59              "    NAME    descriptive event name\n"
60              "    ADDRESS address of event class instance\n"
61              "    RUNCNT  number of times, the event was called\n"
62              "    S       state:\n"
63              "              R  runnable\n"
64              "              W  waiting\n"
65              "              -  event disabled\n"
66              "    INFO    further event specific information")
67         );
68 #endif
69 }
70
71 prefix_ void senf::scheduler::detail::EventManager::listEvents(std::ostream & os)
72 {
73     // On an 80 column display, this wraps nicely directly before the INFO column
74     boost::format fmt  ("%s %-55.55s 0x%08x %8d %s %s\n");
75     os << boost::format("%s %-55.55s %-10s %8s %s %s\n")
76         % "TP" % "NAME" % "ADDRESS" % "RUNCNT" % "S" % "INFO";
77     {
78         FIFORunner::iterator i (FIFORunner::instance().begin());
79         FIFORunner::iterator const i_end (FIFORunner::instance().end());
80         for (; i != i_end; ++i)
81             os << fmt
82                 % i->type()
83                 % i->name()
84                 % reinterpret_cast<unsigned long>(&(*i))
85                 % i->runCount()
86                 % (i->runnable() ? "R" : "W")
87                 % i->info();
88     }
89     {
90         iterator i (begin());
91         iterator const i_end (end());
92         for (; i != i_end; ++i)
93             if (! i->enabled())
94                 os << fmt
95                     % i->type()
96                     % i->name()
97                     % reinterpret_cast<unsigned long>(&(*i))
98                     % i->runCount()
99                     % "-"
100                     % i->info();
101     }
102 }
103
104 //-/////////////////////////////////////////////////////////////////////////////////////////////////
105 #undef prefix_
106 //#include "EventManager.mpp"
107
108 \f
109 // Local Variables:
110 // mode: c++
111 // fill-column: 100
112 // comment-column: 40
113 // c-file-style: "senf"
114 // indent-tabs-mode: nil
115 // ispell-local-dictionary: "american"
116 // compile-command: "scons -u test"
117 // End: