- Added SETPOLICY and LISTPOLICIES commands to text-based interface
- Fixed a bug preventing registration of managers in PoliciesGatekeeper git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@634 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
parent
9642918dd8
commit
30d070a420
|
@ -120,6 +120,12 @@ PythonPolicy::get_description() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Glib::ustring
|
||||||
|
PythonPolicy::get_name() const
|
||||||
|
{
|
||||||
|
return _name;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
PythonPolicy::is_pre_emptive() const throw(UserInterruptException)
|
PythonPolicy::is_pre_emptive() const throw(UserInterruptException)
|
||||||
{
|
{
|
||||||
|
|
|
@ -63,6 +63,8 @@ namespace sgpem
|
||||||
*/
|
*/
|
||||||
Glib::ustring get_description() const;
|
Glib::ustring get_description() const;
|
||||||
|
|
||||||
|
Glib::ustring get_name() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\returns \c TRUE if the policy is preemptive.
|
\returns \c TRUE if the policy is preemptive.
|
||||||
\returns \c FALSE if the policy is not preemptive.
|
\returns \c FALSE if the policy is not preemptive.
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "python_policy_manager.hh"
|
#include "python_policy_manager.hh"
|
||||||
#include "global_preferences.hh"
|
#include "global_preferences.hh"
|
||||||
|
#include "policies_gatekeeper.hh"
|
||||||
|
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
#include <glibmm/ustring.h>
|
#include <glibmm/ustring.h>
|
||||||
|
@ -82,12 +83,12 @@ PythonPolicyManager::get_instance()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Policy&
|
// Policy&
|
||||||
PythonPolicyManager::get_policy()
|
// PythonPolicyManager::get_policy()
|
||||||
{
|
// {
|
||||||
// FIXME : assumes that _python_policy is always != NULL!
|
// // FIXME : assumes that _python_policy is always != NULL!
|
||||||
return *_python_policy;
|
// return *_python_policy;
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -158,7 +159,10 @@ PythonPolicyManager::collect_policies()
|
||||||
|
|
||||||
//FIXME remove me when get_policy is dropped
|
//FIXME remove me when get_policy is dropped
|
||||||
if(policy_name == "fcfs")
|
if(policy_name == "fcfs")
|
||||||
|
{
|
||||||
_python_policy = pypolicy;
|
_python_policy = pypolicy;
|
||||||
|
PoliciesGatekeeper::get_instance().activate_policy(&History::get_instance(), pypolicy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,8 +48,9 @@ namespace sgpem
|
||||||
* In the next milestones it will be possible to manage
|
* In the next milestones it will be possible to manage
|
||||||
* more than one, and to retrieve the correct Policy by
|
* more than one, and to retrieve the correct Policy by
|
||||||
* passing a unique ID.
|
* passing a unique ID.
|
||||||
|
FIXME depreceated
|
||||||
*/
|
*/
|
||||||
Policy& get_policy();
|
//Policy& get_policy();
|
||||||
|
|
||||||
/** \brief Initialize the Python interpreter.
|
/** \brief Initialize the Python interpreter.
|
||||||
*
|
*
|
||||||
|
|
|
@ -44,6 +44,11 @@ public:
|
||||||
void test_init(const char* policy_name) {
|
void test_init(const char* policy_name) {
|
||||||
init();
|
init();
|
||||||
_python_policy = new PythonPolicy(policy_name);
|
_python_policy = new PythonPolicy(policy_name);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Policy& get_policy() {
|
||||||
|
return *_python_policy;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ PoliciesGatekeeper::register_manager(PolicyManager* manager)
|
||||||
|
|
||||||
ManagerIterator end = _registered.end();
|
ManagerIterator end = _registered.end();
|
||||||
|
|
||||||
if(find(_registered.begin(), end, manager) != end)
|
if(find(_registered.begin(), end, manager) == end)
|
||||||
_registered.push_back(manager);
|
_registered.push_back(manager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ namespace sgpem
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class PoliciesGatekeeper
|
class SG_DLLEXPORT PoliciesGatekeeper
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/** \brief Returns the unique instance of this class, conforming to the Singleton pattern.
|
/** \brief Returns the unique instance of this class, conforming to the Singleton pattern.
|
||||||
|
|
|
@ -85,6 +85,8 @@ namespace sgpem
|
||||||
*/
|
*/
|
||||||
virtual Glib::ustring get_description() const = 0;
|
virtual Glib::ustring get_description() const = 0;
|
||||||
|
|
||||||
|
virtual Glib::ustring get_name() const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Tell if this policy is preemptible.
|
Tell if this policy is preemptible.
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ namespace sgpem
|
||||||
\return A reference to the policy.
|
\return A reference to the policy.
|
||||||
FIXME deprecated
|
FIXME deprecated
|
||||||
*/
|
*/
|
||||||
virtual Policy& get_policy() = 0;
|
//virtual Policy& get_policy() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Init (or reset if yet initialized) the manager.
|
Init (or reset if yet initialized) the manager.
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "policy.hh"
|
#include "policy.hh"
|
||||||
#include "scheduler.hh"
|
#include "scheduler.hh"
|
||||||
#include "policy_manager.hh"
|
#include "policy_manager.hh"
|
||||||
|
#include "policies_gatekeeper.hh"
|
||||||
#include "user_interrupt_exception.hh"
|
#include "user_interrupt_exception.hh"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
@ -76,7 +77,8 @@ Scheduler::set_policy(Policy* p)
|
||||||
Policy&
|
Policy&
|
||||||
Scheduler::get_policy()
|
Scheduler::get_policy()
|
||||||
{
|
{
|
||||||
return _policy_manager.get_policy();
|
//return _policy_manager.get_policy();
|
||||||
|
return *PoliciesGatekeeper::get_instance().get_current_policy(&History::get_instance());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,9 @@
|
||||||
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
#include "backend/string_utils.hh"
|
#include "backend/string_utils.hh"
|
||||||
|
#include "backend/policies_gatekeeper.hh"
|
||||||
|
#include "backend/policy_manager.hh"
|
||||||
|
#include "backend/history.hh"
|
||||||
|
|
||||||
#include "text_simulation.hh"
|
#include "text_simulation.hh"
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
@ -295,6 +298,66 @@ check:
|
||||||
}
|
}
|
||||||
obj->_devices[quale]->write_buffer(obj->get_policy()->get_description());
|
obj->_devices[quale]->write_buffer(obj->get_policy()->get_description());
|
||||||
}
|
}
|
||||||
|
else if(arguments[param] == "SETPOLICY")
|
||||||
|
{
|
||||||
|
if(show_help)
|
||||||
|
{
|
||||||
|
obj->_devices[quale]->write_buffer(_(
|
||||||
|
"\n-- SetPolicy COMMAND --\nSelects the current applied policy."
|
||||||
|
"Syntax: SetPolicy <name>"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//FIXME assuming only one policy manager is present, but who cares, this
|
||||||
|
//is only temporary code...
|
||||||
|
PolicyManager* manager = PoliciesGatekeeper::get_instance().get_registered()[0];
|
||||||
|
|
||||||
|
vector<Policy*> available = manager->get_avail_policies();
|
||||||
|
|
||||||
|
|
||||||
|
obj->_devices[quale]->write_buffer(arguments[1] + "\n");
|
||||||
|
|
||||||
|
for(vector<Policy*>::iterator it = available.begin(); it != available.end(); ++it)
|
||||||
|
{
|
||||||
|
if((*it)->get_name().casefold() == arguments[1].casefold())
|
||||||
|
{
|
||||||
|
obj->stop();
|
||||||
|
PoliciesGatekeeper::get_instance().activate_policy(&History::get_instance(), *it);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
obj->_devices[quale]->write_buffer(_(
|
||||||
|
"\nERROR: no policy found with that name."
|
||||||
|
"\nType HELP SETPOLICY for the description of the sintax"));
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(arguments[param] == "LISTPOLICIES")
|
||||||
|
{
|
||||||
|
if(show_help)
|
||||||
|
{
|
||||||
|
obj->_devices[quale]->write_buffer(_(
|
||||||
|
"\n-- ListPolicies COMMAND --\nShows the name of available policies."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//FIXME assuming only one policy manager is present, but who cares, this
|
||||||
|
//is only temporary code...
|
||||||
|
PolicyManager* manager = PoliciesGatekeeper::get_instance().get_registered()[0];
|
||||||
|
|
||||||
|
vector<Policy*> available = manager->get_avail_policies();
|
||||||
|
|
||||||
|
for(vector<Policy*>::iterator it = available.begin(); it != available.end(); ++it)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Glib::ustring str;
|
||||||
|
// int_to_string((int)*it, str);
|
||||||
|
// obj->_devices[quale]->write_buffer(str + "\n");
|
||||||
|
obj->_devices[quale]->write_buffer("\n" + (*it)->get_name());
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (arguments[param] == "GETPOLICYATTRIBUTES")
|
else if (arguments[param] == "GETPOLICYATTRIBUTES")
|
||||||
{
|
{
|
||||||
if (show_help)
|
if (show_help)
|
||||||
|
|
Loading…
Reference in New Issue