コード例 #1
0
ファイル: Server.class.php プロジェクト: skdong/nfs-ovd
 public function getNbUsedSessions()
 {
     $buf = Abstract_Session::countByServer($this->fqdn);
     return $buf;
 }
コード例 #2
0
ファイル: SessionManagement.php プロジェクト: skdong/nfs-ovd
 public function buildServersList()
 {
     if (!$this->user) {
         Logger::error('main', 'SessionManagement::buildServersList - User is not authenticated, aborting');
         throw_response(AUTH_FAILED);
     }
     $serverRoles = $this->getServerRoles();
     $this->servers = array();
     foreach ($serverRoles as $role) {
         if (!array_key_exists($role, $this->servers)) {
             $this->servers[$role] = array();
         }
         switch ($role) {
             case Server::SERVER_ROLE_APS:
                 $applicationServerTypes = $this->getApplicationServerTypes();
                 $servers = array();
                 foreach ($applicationServerTypes as $type) {
                     $buf = $this->user->getAvailableServers($type);
                     if (is_null($buf) || !is_array($buf)) {
                         return false;
                     }
                     $servers = array_merge($servers, $buf);
                 }
                 $slave_server_settings = $this->prefs->get('general', 'slave_server_settings');
                 if (is_array($slave_server_settings) && array_key_exists('use_max_sessions_limit', $slave_server_settings) && $slave_server_settings['use_max_sessions_limit'] == 1) {
                     foreach ($servers as $k => $server) {
                         if (!isset($server->max_sessions) || $server->max_sessions == 0) {
                             continue;
                         }
                         $total = Abstract_Session::countByServer($server->fqdn);
                         if ($total >= $server->max_sessions) {
                             Logger::warning('main', 'SessionManagement::buildServersList - Server \'' . $server->fqdn . '\' has reached its "max sessions" limit, sessions cannot be launched on it anymore');
                             unset($servers[$k]);
                         }
                     }
                 }
                 if (count($servers) == 0) {
                     $event = new SessionStart(array('user' => $this->user));
                     $event->setAttribute('ok', false);
                     $event->setAttribute('error', _('No available server'));
                     $event->emit();
                     Logger::error('main', 'SessionManagement::buildServersList - No "' . $role . '" server found for User "' . $this->user->getAttribute('login') . '", aborting');
                     return false;
                 }
                 foreach ($servers as $server) {
                     $this->servers[Server::SERVER_ROLE_APS][$server->fqdn] = array('status' => Session::SESSION_STATUS_CREATED);
                 }
                 break;
             case Server::SERVER_ROLE_FS:
                 if (get_class($this) != 'SessionManagement_internal') {
                     Logger::error('main', 'SessionManagement::buildServersList - Role "' . $role . '" is not compatible with the current integration mode (' . substr(get_class($this), strlen('SessionManagement_')) . '), aborting');
                     return false;
                 }
                 $default_settings = $this->user->getSessionSettings('session_settings_defaults');
                 $enable_profiles = $default_settings['enable_profiles'] == 1 ? true : false;
                 $auto_create_profile = $default_settings['auto_create_profile'] == 1 ? true : false;
                 $start_without_profile = $default_settings['start_without_profile'] == 1 ? true : false;
                 $enable_sharedfolders = $default_settings['enable_sharedfolders'] == 1 ? true : false;
                 $start_without_all_sharedfolders = $default_settings['start_without_all_sharedfolders'] == 1 ? true : false;
                 if ($enable_profiles) {
                     $fileservers = Abstract_Server::load_available_by_role(Server::SERVER_ROLE_FS);
                     if (count($fileservers) > 0) {
                         $profiles = $this->user->getProfiles();
                         if (!is_array($profiles)) {
                             Logger::error('main', 'SessionManagement::buildServersList - getProfiles() failed for User "' . $this->user->getAttribute('login') . '", aborting');
                             return false;
                         }
                         if (count($profiles) == 1) {
                             Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" already have a Profile, using it');
                             $profile = array_pop($profiles);
                             foreach ($fileservers as $fileserver) {
                                 if ($fileserver->fqdn != $profile->server) {
                                     continue;
                                 }
                                 if (!array_key_exists($fileserver->fqdn, $this->servers[Server::SERVER_ROLE_FS])) {
                                     $this->servers[Server::SERVER_ROLE_FS][$fileserver->fqdn] = array();
                                 }
                                 $this->servers[Server::SERVER_ROLE_FS][$fileserver->fqdn][] = array('type' => 'profile', 'server' => $fileserver, 'dir' => $profile->id);
                                 break;
                             }
                         } else {
                             Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" does not have a Profile for now, checking for auto-creation');
                             if ($auto_create_profile) {
                                 Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" Profile will be auto-created and used');
                                 $profileDB = ProfileDB::getInstance();
                                 $fileserver = $profileDB->chooseFileServer();
                                 if (!is_object($fileserver)) {
                                     Logger::error('main', 'SessionManagement::buildServersList - Auto-creation of Profile for User "' . $this->user->getAttribute('login') . '" failed (unable to get a valid FileServer)');
                                     return false;
                                 }
                                 $profile = new Profile();
                                 $profile->server = $fileserver->getAttribute('fqdn');
                                 if (!$profileDB->addToServer($profile, $fileserver)) {
                                     Logger::error('main', 'SessionManagement::buildServersList - Auto-creation of Profile for User "' . $this->user->getAttribute('login') . '" failed (unable to add the Profile to the FileServer)');
                                     return false;
                                 }
                                 if (!$profile->addUser($this->user)) {
                                     Logger::error('main', 'SessionManagement::buildServersList - Auto-creation of Profile for User "' . $this->user->getAttribute('login') . '" failed (unable to associate the User to the Profile)');
                                     return false;
                                 }
                                 if (!array_key_exists($fileserver->fqdn, $this->servers[Server::SERVER_ROLE_FS])) {
                                     $this->servers[Server::SERVER_ROLE_FS][$fileserver->fqdn] = array();
                                 }
                                 $this->servers[Server::SERVER_ROLE_FS][$fileserver->fqdn][] = array('type' => 'profile', 'server' => $fileserver, 'dir' => $profile->id);
                             } else {
                                 Logger::debug('main', 'SessionManagement::buildServersList - Auto-creation of Profile for User "' . $this->user->getAttribute('login') . '" disabled, checking for session without Profile');
                                 if (!$start_without_profile) {
                                     Logger::error('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" does not have a valid Profile, aborting');
                                     return false;
                                 }
                                 Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" can start a session without a valid Profile, proceeding');
                             }
                         }
                     } else {
                         Logger::debug('main', 'SessionManagement::buildServersList - No "' . $role . '" server found for User "' . $this->user->getAttribute('login') . '", checking for session without Profile');
                         if (!$start_without_profile) {
                             Logger::error('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" does not have a valid Profile, aborting');
                             return false;
                         }
                         Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" can start a session without a valid Profile, proceeding');
                     }
                 }
                 if ($enable_sharedfolders) {
                     $sharedfolders = $this->user->getSharedFolders();
                     if (!is_array($sharedfolders)) {
                         Logger::error('main', 'SessionManagement::buildServersList - getSharedFolders() failed for User "' . $this->user->getAttribute('login') . '", aborting');
                         return false;
                     }
                     if (count($sharedfolders) > 0) {
                         foreach ($sharedfolders as $sharedfolder) {
                             $fileserver = Abstract_Server::load($sharedfolder->server);
                             if (!$fileserver || !$fileserver->isOnline() || $fileserver->getAttribute('locked')) {
                                 Logger::warning('main', 'SessionManagement::buildServersList - Server "' . $sharedfolder->server . '" for SharedFolder "' . $sharedfolder->id . '" is not available');
                                 if (!$start_without_all_sharedfolders) {
                                     Logger::error('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" does not have all SharedFolders available, aborting');
                                     return false;
                                 } else {
                                     Logger::debug('main', 'SessionManagement::buildServersList - User "' . $this->user->getAttribute('login') . '" can start a session without all SharedFolders available, proceeding');
                                     continue;
                                 }
                             }
                             if (!array_key_exists($fileserver->fqdn, $this->servers[Server::SERVER_ROLE_FS])) {
                                 $this->servers[Server::SERVER_ROLE_FS][$fileserver->fqdn] = array();
                             }
                             $this->servers[Server::SERVER_ROLE_FS][$fileserver->fqdn][] = array('type' => 'sharedfolder', 'server' => $fileserver, 'dir' => $sharedfolder->id, 'name' => $sharedfolder->name);
                         }
                     }
                 }
                 break;
         }
     }
     return true;
 }
コード例 #3
0
 public function getAvailableApplicationServers()
 {
     $servers = Abstract_Server::load_available_by_role(Server::SERVER_ROLE_APS);
     $slave_server_settings = $this->prefs->get('general', 'slave_server_settings');
     if (is_array($slave_server_settings) && array_key_exists('use_max_sessions_limit', $slave_server_settings) && ($slave_server_settings['use_max_sessions_limit'] = 1)) {
         foreach ($servers as $k => $server) {
             if (!isset($server->max_sessions) || $server->max_sessions == 0) {
                 continue;
             }
             $total = Abstract_Session::countByServer($server->id);
             if ($total >= $server->max_sessions) {
                 Logger::warning('main', 'SessionManagement::buildServersList - Server \'' . $server->fqdn . '\' has reached its "max sessions" limit, sessions cannot be launched on it anymore');
                 unset($servers[$k]);
             }
         }
     }
     return $servers;
 }
コード例 #4
0
function server_display_role_aps($server, $var)
{
    $can_do_action = $var['can_do_action'];
    $can_use_apt = $var['can_use_apt'];
    $server_online = $var['server_online'];
    $applications = $var['applications'];
    $applications_available = $var['applications_available'];
    $applications_all = $var['applications_all'];
    $servers_all = $var['servers_all'];
    $servers_replication = $var['servers_replication'];
    $has_sessions = $var['has_sessions'];
    $sessions = $var['sessions'];
    $total = $var['total_sessions'];
    if (array_key_exists('pagechanger', $var)) {
        $pagechanger = $var['pagechanger'];
    }
    $tasks = array();
    $apps_in_remove = array();
    $apps_in_install = array();
    if ($server_online) {
        $tasks = $var['tasks'];
        $apps_in_install = $var['apps_in_install'];
        $apps_in_remove = $var['apps_in_remove'];
    }
    // 	if ($server->type == 'windows' && isset($server->windows_domain) && ! is_null($server->windows_domain)) {
    // 		echo '<tr><td>';
    // 		echo _('Inside Active Directory domain').': ';
    // 		echo '</td><td>';
    // 		echo $server->windows_domain;
    // 		echo '</td></tr>';
    // 	}
    echo '<table>';
    echo '<tr><td>';
    echo _('Number of available sessions on this server') . ': ';
    echo '</td><td>';
    if ($can_do_action) {
        echo '<form action="actions.php" method="post">';
        echo '<input type="hidden" name="name" value="Server" />';
        echo '<input type="hidden" name="fqdn" value="' . $server->fqdn . '" />';
        echo '<input type="hidden" name="action" value="available_sessions" />';
        echo '<input type="button" value="-" onclick="field_increase(\'number\', -1);" /> ';
    }
    echo '<input type="text" id="number" name="max_sessions" value="' . $server->getNbMaxSessions() . '" size="3" onchange="field_check_integer(this);" />';
    if ($var['can_do_action']) {
        echo ' <input type="button" value="+" onclick="field_increase(\'number\', 1);" />';
        echo ' <input type="button" value="' . _('default') . '" onclick="$(\'number\').value=\'' . $server->getDefaultMaxSessions() . '\';" />';
        echo ' <input type="submit" value="' . _('change') . '" />';
        echo '</form>';
    }
    echo '</td></tr>';
    echo '</table>';
    if ($server_online && $can_do_action && $can_use_apt) {
        echo '<div class="section">';
        echo '<h2>' . _('Install an application') . '</h2>';
        echo '<form action="actions.php" method="post">';
        echo '<input type="hidden" name="name" value="Server" />';
        echo '<input type="hidden" name="action" value="install_line">';
        echo '<input type="hidden" name="fqdn" value="' . $server->fqdn . '">';
        echo '<input type="text" name="line"> ';
        echo '<input type="submit" value="' . _('Install from a package name') . '">';
        echo '</form>';
        echo '<br />';
        echo '<div id="installableApplicationsList">';
        echo '<a href="javascript:;" onclick="toggleInstallableApplicationsList(\'' . $server->fqdn . '\'); return false;"><div style="width: 16px; height: 16px; float: left;" id="installableApplicationsList_ajax"></div></a><div style="float: left;"><a href="javascript:;" onclick="toggleInstallableApplicationsList(\'' . $server->fqdn . '\'); return false;">&nbsp;' . _('more options') . '</a></div>';
        echo '<div style="clear: both;"></div>';
        echo '<div id="installableApplicationsList_content" style="display: none;"><script type="text/javascript">Event.observe(window, \'load\', function() { offContent(\'installableApplicationsList\'); });</script></div>';
        echo '</div>';
        echo '<div id="installableApplicationsListDefault" style="display: none; visibility: hidden;">';
        echo '<form action="actions.php" method="post">';
        echo '<input type="hidden" name="name" value="Server" />';
        echo '<input type="hidden" name="action" value="install_line">';
        echo '<input type="hidden" name="fqdn" value="' . $server->fqdn . '">';
        echo '<table>';
        echo '<tr>';
        echo '<td>' . _('Category') . '</td>';
        echo '<td><div id="installable_applications_category"></div></td>';
        echo '<td></td>';
        echo '</tr>';
        echo '<tr>';
        echo '<td>' . _('Application') . '</td>';
        echo '<td><div id="installable_applications_application"></div></td> ';
        echo '<td><input type="submit" value="' . _('Install') . '" /></td>';
        echo '<td></td>';
        echo '</tr>';
        echo '</table>';
        echo '</form>';
        echo '</div>';
        echo '</div>';
        echo '<div class="section">';
        echo '<h2>' . _('Upgrade') . '</h2>';
        echo '<form action="actions.php" method="post">';
        echo '<input type="hidden" name="name" value="Server" />';
        echo '<input type="hidden" name="action" value="upgrade">';
        echo '<input type="hidden" name="fqdn" value="' . $server->fqdn . '">';
        echo '<input type="submit" value="' . _('Upgrade the internal system and applications') . '">';
        echo '</form>';
        echo '</div>';
    }
    // Application part
    if (count($applications_all) > 0) {
        $count = 0;
        echo '<div class="section">';
        echo '<h2>' . _('Applications available on this server') . '</h2>';
        echo '<table border="0" cellspacing="1" cellpadding="3">';
        if (count($applications) > 0) {
            foreach ($applications as $app) {
                $content = 'content' . ($count++ % 2 == 0 ? 1 : 2);
                $remove_in_progress = in_array($app, $apps_in_remove);
                echo '<tr class="' . $content . '">';
                echo '<td>';
                echo '<img src="media/image/cache.php?id=' . $app->getAttribute('id') . '" alt="" title="" /> ';
                echo '<a href="applications.php?action=manage&id=' . $app->getAttribute('id') . '">';
                echo $app->getAttribute('name') . '</a>';
                echo '</td>';
                if ($server_online && $can_do_action && $can_use_apt) {
                    echo '<td>';
                    if ($remove_in_progress) {
                        echo 'remove in progress';
                    } else {
                        echo '<form action="actions.php" method="post" onsubmit="return confirm(\'' . _('Are you sure you want to remove this application from this server?') . '\');">';
                        echo '<input type="hidden" name="action" value="del" />';
                        echo '<input type="hidden" name="name" value="Application_Server" />';
                        echo '<input type="hidden" name="server" value="' . $server->fqdn . '" />';
                        echo '<input type="hidden" name="application" value="' . $app->getAttribute('id') . '" />';
                        echo '<input type="submit" value="' . _('Remove from this server') . '" />';
                        echo '</form>';
                    }
                }
                echo '</td>';
                echo '</tr>';
            }
        }
        foreach ($apps_in_install as $app) {
            $content = 'content' . ($count++ % 2 == 0 ? 1 : 2);
            echo '<tr class="' . $content . '">';
            echo '<td>';
            echo '<a href="applications.php?action=manage&id=' . $app->getAttribute('id') . '">';
            echo $app->getAttribute('name') . '</a>';
            echo '</td>';
            echo '<td>' . _('install in progress') . '</td>';
            echo '</tr>';
        }
        if (count($applications_available) > 0 && $can_do_action && $can_use_apt) {
            $content = 'content' . ($count++ % 2 == 0 ? 1 : 2);
            echo '<tr class="' . $content . '"><form action="actions.php" method="post">';
            echo '<input type="hidden" name="action" value="add" />';
            echo '<input type="hidden" name="name" value="Application_Server" />';
            echo '<input type="hidden" name="server" value="' . $server->fqdn . '" />';
            echo '<td>';
            echo '<select name="application">';
            foreach ($applications_available as $app) {
                echo '<option value="' . $app->getAttribute('id') . '">' . $app->getAttribute('name') . '</option>';
            }
            echo '</select>';
            echo '</td>';
            echo '<td><input type="submit" value="' . _('Install on this server') . '" /></td>';
            echo '</form></tr>';
        }
        echo '</table>';
        echo "</div>\n";
    }
    // Server Replication part
    if (count($servers_replication) > 0 && $can_use_apt && $can_do_action) {
        echo '<div class="section">';
        // div replication
        echo '<h2>' . _('Replication') . '</h2>';
        echo '<form action="actions.php" method="post">';
        echo '<input type="hidden" name="name" value="Server" />';
        echo '<input type="hidden" name="action" value="replication" />';
        echo '<input type="hidden" name="fqdn" value="' . $server->fqdn . '" />';
        echo '<table border="0" cellspacing="1" cellpadding="3">';
        foreach ($servers_replication as $server_) {
            echo '<tr>';
            echo '<td><input class="input_checkbox" type="checkbox" name="servers[]" value="' . $server_->fqdn . '" /></td>';
            echo '<td><a href="servers.php?action=manage&fqdn=' . $server_->fqdn . '">' . $server_->fqdn . '</a></td></tr>';
        }
        echo '<tr><td></td><td><input type="submit" value="' . _('Replicate on those servers') . '" /></td></tr>';
        echo '</table>';
        echo '</form>';
        echo "</div>";
        // div replication
    }
    // Tasks part
    if (count($tasks) > 0) {
        echo '<div class="section">';
        // div tasks
        echo '<h2>' . _('Active tasks on this server') . '</h2>';
        echo '<table border="0" cellspacing="1" cellpadding="3">';
        echo '<tr class="title">';
        echo '<th>' . _('ID') . '</th>';
        echo '<th>' . _('Type') . '</th>';
        echo '<th>' . _('Status') . '</th>';
        echo '<th>' . _('Details') . '</th>';
        echo '</tr>';
        $count = 0;
        foreach ($tasks as $task) {
            $content = 'content' . ($count++ % 2 == 0 ? 1 : 2);
            if ($task->failed()) {
                $status = '<span class="msg_error">' . _('Error') . '</span>';
            } else {
                $status = '<span class="msg_ok">' . $task->status . '</span>';
            }
            echo '<tr class="' . $content . '">';
            echo '<td><a href="tasks.php?action=manage&id=' . $task->id . '">' . $task->id . '</a></td>';
            echo '<td>' . get_class($task) . '</td>';
            echo '<td>' . $status . '</td>';
            echo '<td>' . $task->getRequest() . '</td>';
            echo '</tr>';
        }
        echo '</table>';
        echo "</div>";
        // div tasks
    }
    // Sessions part
    if ($has_sessions) {
        echo '<div>';
        // div 1 has_sessions
        $total = Abstract_Session::countByServer($server->fqdn);
        echo '<h2>' . sprintf(_('Active sessions (total: %s)'), $total) . '</h2>';
        echo '<div>';
        if (isset($pagechanger)) {
            echo $pagechanger;
        }
        echo '<table border="0" cellspacing="1" cellpadding="3">';
        foreach ($sessions as $session) {
            echo '<form action="sessions.php"><tr>';
            echo '<td>';
            $buf = $session->getAttribute('start_time');
            if (!$buf) {
                echo _('Not started yet');
            } else {
                echo @date('d/m/Y H:i:s', $session->getAttribute('start_time'));
            }
            echo '</td>';
            echo '<td><a href="users.php?action=manage&id=' . $session->getAttribute('user_login') . '">' . $session->getAttribute('user_displayname') . '</td>';
            echo '<td>';
            echo '<input type="hidden" name="info" value="' . $session->id . '" />';
            echo '</td><td><input type="submit" value="' . _('Information about this session') . '" /></td>';
            echo '</td>';
            echo '</tr></form>';
        }
        echo '</table>';
        if (isset($pagechanger)) {
            echo $pagechanger;
        }
        echo '</div>';
        echo '</div>';
    }
}