Commit 466ff7d4 authored by Ricardo Cosme's avatar Ricardo Cosme

[OPENBUS-2968] Reconfiguração dinâmica do barramento

+ Implementação de métodos do tipo 'get' para obter as propriedades mutáveis: administradores, validadores, maxchannels, loglevel e oilloglevel.
+ Correção de erro que impedia o uso das ações --grant-admin-to e --revoke-admin-from quando o usuário não fornece o parâmetro --users.
parent 068b1d8d
......@@ -58,6 +58,13 @@ interface Configuration {
*/
void revokeAdminFrom(in StrSeq users) raises (ServiceFailure);
/**
* \brief Retorna a lista de usuários com permissão de administração.
*
* \return Lista de administradores
*/
StrSeq getAdmins() raises (ServiceFailure);
/**
* \brief Recarrega um validador de login.
*
......@@ -71,21 +78,48 @@ interface Configuration {
*/
void delValidator(in string validator) raises (ServiceFailure);
/**
* \brief Retorna a lista de validadores.
*
* \return Lista de validadores
*/
StrSeq getValidators() raises (ServiceFailure);
/**
* \brief Redefine o número máximo de canais de comunicação do OiL.
*/
void setMaxChannels(in long maxchannels) raises (ServiceFailure);
/**
* \brief Retorna o número máximo de canais de comunicação do OiL.
*
* \return Número máximo de canais de comunicação do OiL.
*/
long getMaxChannels() raises (ServiceFailure);
/**
* \brief Redefine o nível de log do barramento.
*/
void setLogLevel(in unsigned short loglevel) raises (ServiceFailure);
/**
* \brief Retorna o nível de log do barramento.
*
* \return Nível de log do barramento.
*/
unsigned short getLogLevel() raises (ServiceFailure);
/**
* \brief Redefine o nível de log do OiL.
*/
void setOilLogLevel(in unsigned short oilloglevel) raises (ServiceFailure);
/**
* \brief Retorna o nível de log do OiL.
*
* \return Nível de log do OiL.
*/
unsigned short getOilLogLevel() raises (ServiceFailure);
};
}; // version
......
......@@ -194,16 +194,26 @@ return function(...)
--grant-admin-to="<user1> <user2> ... <userN>"
* Revoga os privilégios de administração para uma lista de usuários:
--revoke-admin-from="<user1> <user2> ... <userN>"
* Mostra a lista de administradores:
--get-admins
* Recarrega um validador de login. Se o não existir o validador é carregado:
--reload-validator=<validator>
* Remove um validador de login:
--del-validator=<validator>
* Mostra a lista de validadores:
--get-validators
* Redefine o número máximo de canais de comunicação do OiL:
--set-max-channels=<integer>
* Mostra o número máximo de canais de comunicação do OiL:
--get-max-channels
* Redefine o nível de log do barramento:
--set-log-level=<integer>
* Mostra o nível de log do barramento:
--get-log-level
* Redefine o nível de log do OiL.
--set-oil-log-level=<integer>
* Mostra o nível de log do OiL:
--get-oil-log-level
-------------------------------------------------------------------------------
]]
......@@ -362,21 +372,36 @@ return function(...)
{n = 1, params = {users = 1}},
{n = 1, params = {}},
};
["get-admins"] = {
{n = 0, params = {}},
};
["reload-validator"] = {
{n = 1, params = {}},
};
["del-validator"] = {
{n = 1, params = {}},
};
["get-validators"] = {
{n = 0, params = {}},
};
["set-max-channels"] = {
{n = 1, params = {}},
};
["get-max-channels"] = {
{n = 0, params = {}},
};
["set-log-level"] = {
{n = 1, params = {}},
};
["get-log-level"] = {
{n = 0, params = {}},
};
["set-oil-log-level"] = {
{n = 1, params = {}},
};
["get-oil-log-level"] = {
{n = 0, params = {}},
};
}
---
......@@ -1353,13 +1378,13 @@ return function(...)
end
local param = cmd.params[cmd.name]
param = (paramtype and paramtype == "number") and tonumber(param) or param
local ok, errmsg = pcall(conn.configuration[method],
conn.configuration, param)
local ok, res = pcall(conn.configuration[method],
conn.configuration, param)
if not ok then
print('[ERRO]: '..errmsg.message)
print('[ERRO]: '..res.message)
return false
end
return true
return ok, res
end
handlers["reload-configs-file"] = function()
......@@ -1378,22 +1403,39 @@ return function(...)
end
return t
end
local function handleConfigurationGetCall(cmd, method, attr)
local ok, res = handleConfigurationCall(cmd, method)
if ok then
if type(res) == "table" then
local admins = "{ "
admins = admins..table.concat(res, ", ")
admins = admins.." }"
res = admins
end
print(attr.." = "..tostring(res))
end
return ok
end
handlers["grant-admin-to"] = function(cmd)
cmd.params[cmd.name] = list2table(cmd.params.users)
cmd.params[cmd.name] = list2table(cmd.params[cmd.name])
return handleConfigurationCall(cmd, "grantAdminTo")
end
handlers["revoke-admin-from"] = function(cmd)
cmd.params[cmd.name] = list2table(cmd.params.users)
cmd.params[cmd.name] = list2table(cmd.params[cmd.name])
return handleConfigurationCall(cmd, "revokeAdminFrom")
end
handlers["get-admins"] = function(cmd)
return handleConfigurationGetCall(cmd, "getAdmins", "admins")
end
local function handleValidator(cmd, action)
return handleConfigurationCall(cmd, action.."Validator")
end
handlers["reload-validator"] = function(cmd)
return handleValidator(cmd, "reload")
end
......@@ -1402,18 +1444,34 @@ return function(...)
return handleValidator(cmd, "del")
end
handlers["get-validators"] = function(cmd)
return handleConfigurationGetCall(cmd, "getValidators", "validators")
end
handlers["set-max-channels"] = function(cmd)
return handleConfigurationCall(cmd, "setMaxChannels", "number")
end
handlers["get-max-channels"] = function(cmd)
return handleConfigurationGetCall(cmd, "getMaxChannels", "maxchannels")
end
handlers["set-log-level"] = function(cmd)
return handleConfigurationCall(cmd, "setLogLevel", "number")
end
handlers["get-log-level"] = function(cmd)
return handleConfigurationGetCall(cmd, "getLogLevel", "loglevel")
end
handlers["set-oil-log-level"] = function(cmd)
return handleConfigurationCall(cmd, "setOilLogLevel", "number")
end
handlers["get-oil-log-level"] = function(cmd)
return handleConfigurationGetCall(cmd, "getOilLogLevel", "oilloglevel")
end
---
-- Monta um relatório sobre o estado atual do barramento
--
......
......@@ -529,6 +529,14 @@ Options:
end
end
local function getList(t)
local list = {}
for e in pairs(t) do
list[#list+1] = e
end
return list
end
function Configuration:grantAdminTo(users)
updateAdmins(users, "grant")
end
......@@ -537,6 +545,10 @@ Options:
updateAdmins(users, "revoke")
end
function Configuration:getAdmins()
return getList(adminUsers)
end
function Configuration:reloadValidator(validator)
local res, _, errmsg = loadValidator(validator)
if not res then
......@@ -554,6 +566,10 @@ Options:
end
end
function Configuration:getValidators()
return getList(validators)
end
function Configuration:setMaxChannels(maxchannels)
if not resetMaxChannels(orb, maxchannels) then
return ServiceFailure{
......@@ -562,6 +578,10 @@ Options:
end
end
function Configuration:getMaxChannels()
return orb.ResourceManager.inuse.maxsize
end
local function updateLogLevel(log, loglevel)
if not setLogLevel(log, loglevel) then
return ServiceFailure{
......@@ -574,10 +594,18 @@ Options:
return updateLogLevel("core", loglevel)
end
function Configuration:getLogLevel()
return log:level()
end
function Configuration:setOilLogLevel(loglevel)
return updateLogLevel("oil", loglevel)
end
function Configuration:getOilLogLevel()
return oillog:level()
end
-- create SCS component
local OBSCS = newSCS{
orb = orb,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment