mirror of
https://github.com/dkmstr/openuds.git
synced 2025-03-21 10:50:26 +03:00
Adding "user friendly" editors to Configuration... :-)
This commit is contained in:
parent
75c9313a0f
commit
0d6171bc0f
@ -259,9 +259,11 @@ encoding//src/uds/tests/core/__init__.py=utf-8
|
||||
encoding//src/uds/tests/core/util/cache.py=utf-8
|
||||
encoding//src/uds/tests/core/util/net.py=utf-8
|
||||
encoding//src/uds/tests/core/util/storage.py=utf-8
|
||||
encoding//src/uds/tests/util/UDSWebTest.py=utf-8
|
||||
encoding//src/uds/tests/web/__init__.py=utf-8
|
||||
encoding//src/uds/tests/web/admin/auth/__init__.py=utf-8
|
||||
encoding//src/uds/tests/web/admin/auth/create.py=utf-8
|
||||
encoding//src/uds/tests/web/admin/auth/create_auth.py=utf-8
|
||||
encoding//src/uds/tests/web/admin/auth/create_user.py=utf-8
|
||||
encoding//src/uds/tests/web/auth/__init__.py=utf-8
|
||||
encoding//src/uds/transports/HTML5RDP/HTML5RDP.py=utf-8
|
||||
encoding//src/uds/transports/HTML5RDP/__init__.py=utf-8
|
||||
|
@ -59,7 +59,8 @@ class Config(Handler):
|
||||
res[cfg.section()][cfg.key()] = {
|
||||
'value': cfg.get(),
|
||||
'crypt': cfg.isCrypted(),
|
||||
'longText': cfg.isLongText()
|
||||
'longText': cfg.isLongText(),
|
||||
'type': cfg.getType()
|
||||
}
|
||||
logger.debug('Configuration: {0}'.format(res))
|
||||
return res
|
||||
|
@ -43,14 +43,20 @@ GLOBAL_SECTION = 'UDS'
|
||||
SECURITY_SECTION = 'Security'
|
||||
CLUSTER_SECTION = 'Cluster'
|
||||
|
||||
|
||||
class Config(object):
|
||||
'''
|
||||
Keeps persistend configuration data
|
||||
Keeps persistence configuration data
|
||||
'''
|
||||
|
||||
# Fields types, so inputs get more "beautiful"
|
||||
TEXT_FIELD = 0
|
||||
LONGTEXT_FIELD = 1
|
||||
NUMERIC_FIELD = 2
|
||||
BOOLEAN_FIELD = 3
|
||||
|
||||
class _Value(object):
|
||||
def __init__(self, section, key, default='', crypt=False, longText=False):
|
||||
def __init__(self, section, key, default='', crypt=False, longText=False, **kwargs):
|
||||
self._type = kwargs.get('type', -1)
|
||||
self._section = section
|
||||
self._key = key
|
||||
self._crypt = crypt
|
||||
@ -69,6 +75,10 @@ class Config(object):
|
||||
self._data = readed.value
|
||||
self._crypt = [self._crypt, True][readed.crypt] # True has "higher" precedende than False
|
||||
self._longText = readed.long
|
||||
if readed.field_type == -1 and self._type != -1:
|
||||
readed.field_type = self._type
|
||||
readed.save()
|
||||
self._type = readed.field_type
|
||||
except Exception:
|
||||
# Not found
|
||||
if self._default != '' and self._crypt:
|
||||
@ -109,6 +119,9 @@ class Config(object):
|
||||
def isLongText(self):
|
||||
return self._longText
|
||||
|
||||
def getType(self):
|
||||
return self._type
|
||||
|
||||
def set(self, value):
|
||||
if self._crypt is True:
|
||||
value = CryptoManager.manager().encrypt(value)
|
||||
@ -117,11 +130,11 @@ class Config(object):
|
||||
'''
|
||||
logger.debug('Saving config {0}.{1} as {2}'.format(self._section.name(), self._key, value))
|
||||
try:
|
||||
if dbConfig.objects.filter(section=self._section.name(), key=self._key).update(value=value, crypt=self._crypt, long=self._longText) == 0:
|
||||
if dbConfig.objects.filter(section=self._section.name(), key=self._key).update(value=value, crypt=self._crypt, long=self._longText, field_type=self._type) == 0:
|
||||
raise Exception() # Do not exists, create a new one
|
||||
except Exception:
|
||||
try:
|
||||
dbConfig.objects.create(section=self._section.name(), key=self._key, value=value, crypt=self._crypt, long=self._longText)
|
||||
dbConfig.objects.create(section=self._section.name(), key=self._key, value=value, crypt=self._crypt, long=self._longText, field_type=self._type)
|
||||
except Exception:
|
||||
# Probably a migration issue, just ignore it
|
||||
logger.info("Could not save configuration key {0}.{1}".format(self._section.name(), self._key))
|
||||
@ -130,14 +143,14 @@ class Config(object):
|
||||
def __init__(self, sectionName):
|
||||
self._sectionName = sectionName
|
||||
|
||||
def value(self, key, default=''):
|
||||
return Config._Value(self, key, default)
|
||||
def value(self, key, default='', **kwargs):
|
||||
return Config._Value(self, key, default, **kwargs)
|
||||
|
||||
def valueCrypt(self, key, default=''):
|
||||
return Config._Value(self, key, default, True)
|
||||
def valueCrypt(self, key, default='', **kwargs):
|
||||
return Config._Value(self, key, default, True, **kwargs)
|
||||
|
||||
def valueLong(self, key, default=''):
|
||||
return Config._Value(self, key, default, False, True)
|
||||
def valueLong(self, key, default='', **kwargs):
|
||||
return Config._Value(self, key, default, False, True, **kwargs)
|
||||
|
||||
def name(self):
|
||||
return self._sectionName
|
||||
@ -149,7 +162,7 @@ class Config(object):
|
||||
@staticmethod
|
||||
def enumerate():
|
||||
for cfg in dbConfig.objects.all().order_by('key'):
|
||||
logger.debug('{0}.{1}:{2}'.format(cfg.section, cfg.key, cfg.value))
|
||||
logger.debug('{0}.{1}:{2},{3}'.format(cfg.section, cfg.key, cfg.value, cfg.field_type))
|
||||
if cfg.crypt is True:
|
||||
val = Config.section(cfg.section).valueCrypt(cfg.key)
|
||||
else:
|
||||
@ -174,92 +187,92 @@ class GlobalConfig(object):
|
||||
'''
|
||||
Simple helper to keep track of global configuration
|
||||
'''
|
||||
SESSION_EXPIRE_TIME = Config.section(GLOBAL_SECTION).value('sessionExpireTime', '24') # Max session duration (in use) after a new publishment has been made
|
||||
SESSION_EXPIRE_TIME = Config.section(GLOBAL_SECTION).value('sessionExpireTime', '24', type=Config.NUMERIC_FIELD) # Max session duration (in use) after a new publishment has been made
|
||||
# Delay between cache checks. reducing this number will increase cache generation speed but also will load service providers
|
||||
CACHE_CHECK_DELAY = Config.section(GLOBAL_SECTION).value('cacheCheckDelay', '19')
|
||||
CACHE_CHECK_DELAY = Config.section(GLOBAL_SECTION).value('cacheCheckDelay', '19', type=Config.NUMERIC_FIELD)
|
||||
# Delayed task number of threads PER SERVER, with higher number of threads, deplayed task will complete sooner, but it will give more load to overall system
|
||||
DELAYED_TASKS_THREADS = Config.section(GLOBAL_SECTION).value('delayedTasksThreads', '4')
|
||||
DELAYED_TASKS_THREADS = Config.section(GLOBAL_SECTION).value('delayedTasksThreads', '4', type=Config.NUMERIC_FIELD)
|
||||
# Number of scheduler threads running PER SERVER, with higher number of threads, deplayed task will complete sooner, but it will give more load to overall system
|
||||
SCHEDULER_THREADS = Config.section(GLOBAL_SECTION).value('schedulerThreads', '3')
|
||||
SCHEDULER_THREADS = Config.section(GLOBAL_SECTION).value('schedulerThreads', '3', type=Config.NUMERIC_FIELD)
|
||||
# Waiting time before removing "errored" and "removed" publications, cache, and user assigned machines. Time is in seconds
|
||||
CLEANUP_CHECK = Config.section(GLOBAL_SECTION).value('cleanupCheck', '3607')
|
||||
CLEANUP_CHECK = Config.section(GLOBAL_SECTION).value('cleanupCheck', '3607', type=Config.NUMERIC_FIELD)
|
||||
# Time to maintaing "info state" items before removing it, in seconds
|
||||
KEEP_INFO_TIME = Config.section(GLOBAL_SECTION).value('keepInfoTime', '14401') # Defaults to 2 days 172800?? better 4 hours xd
|
||||
KEEP_INFO_TIME = Config.section(GLOBAL_SECTION).value('keepInfoTime', '14401', type=Config.NUMERIC_FIELD) # Defaults to 2 days 172800?? better 4 hours xd
|
||||
# Max number of services to be "preparing" at same time
|
||||
MAX_PREPARING_SERVICES = Config.section(GLOBAL_SECTION).value('maxPreparingServices', '15') # Defaults to 15 services at once (per service provider)
|
||||
MAX_PREPARING_SERVICES = Config.section(GLOBAL_SECTION).value('maxPreparingServices', '15', type=Config.NUMERIC_FIELD) # Defaults to 15 services at once (per service provider)
|
||||
# Max number of service to be at "removal" state at same time
|
||||
MAX_REMOVING_SERVICES = Config.section(GLOBAL_SECTION).value('maxRemovingServices', '15') # Defaults to 15 services at once (per service provider)
|
||||
MAX_REMOVING_SERVICES = Config.section(GLOBAL_SECTION).value('maxRemovingServices', '15', type=Config.NUMERIC_FIELD) # Defaults to 15 services at once (per service provider)
|
||||
# If we ignore limits (max....)
|
||||
IGNORE_LIMITS = Config.section(GLOBAL_SECTION).value('ignoreLimits', '0')
|
||||
IGNORE_LIMITS = Config.section(GLOBAL_SECTION).value('ignoreLimits', '0', type=Config.BOOLEAN_FIELD)
|
||||
# Number of services to initiate removal per run of CacheCleaner
|
||||
USER_SERVICE_CLEAN_NUMBER = Config.section(GLOBAL_SECTION).value('userServiceCleanNumber', '3') # Defaults to 3 per wun
|
||||
USER_SERVICE_CLEAN_NUMBER = Config.section(GLOBAL_SECTION).value('userServiceCleanNumber', '3', type=Config.NUMERIC_FIELD) # Defaults to 3 per wun
|
||||
# Removal Check time for cache, publications and deployed services
|
||||
REMOVAL_CHECK = Config.section(GLOBAL_SECTION).value('removalCheck', '31') # Defaults to 30 seconds
|
||||
REMOVAL_CHECK = Config.section(GLOBAL_SECTION).value('removalCheck', '31', type=Config.NUMERIC_FIELD) # Defaults to 30 seconds
|
||||
# Login URL
|
||||
LOGIN_URL = Config.section(GLOBAL_SECTION).value('loginUrl', '/login') # Defaults to /login
|
||||
LOGIN_URL = Config.section(GLOBAL_SECTION).value('loginUrl', '/login', type=Config.TEXT_FIELD) # Defaults to /login
|
||||
# Session duration
|
||||
USER_SESSION_LENGTH = Config.section(SECURITY_SECTION).value('userSessionLength', '14400') # Defaults to 4 hours
|
||||
USER_SESSION_LENGTH = Config.section(SECURITY_SECTION).value('userSessionLength', '14400', type=Config.NUMERIC_FIELD) # Defaults to 4 hours
|
||||
# Superuser (do not need to be at database!!!)
|
||||
SUPER_USER_LOGIN = Config.section(SECURITY_SECTION).value('superUser', 'root') # Defaults to 4 hours
|
||||
SUPER_USER_LOGIN = Config.section(SECURITY_SECTION).value('superUser', 'root', type=Config.TEXT_FIELD)
|
||||
# Superuser password (do not need to be at database!!!)
|
||||
SUPER_USER_PASS = Config.section(SECURITY_SECTION).valueCrypt('rootPass', 'udsmam0')
|
||||
SUPER_USER_PASS = Config.section(SECURITY_SECTION).valueCrypt('rootPass', 'udsmam0', type=Config.TEXT_FIELD)
|
||||
# Idle time before closing session on admin
|
||||
SUPER_USER_ALLOW_WEBACCESS = Config.section(SECURITY_SECTION).value('allowRootWebAccess', '1')
|
||||
SUPER_USER_ALLOW_WEBACCESS = Config.section(SECURITY_SECTION).value('allowRootWebAccess', '1', type=Config.BOOLEAN_FIELD)
|
||||
# Time an admi session can be idle before being "logged out"
|
||||
ADMIN_IDLE_TIME = Config.section(SECURITY_SECTION).value('adminIdleTime', '14400') # Defaults to 4 hous
|
||||
ADMIN_IDLE_TIME = Config.section(SECURITY_SECTION).value('adminIdleTime', '14400', type=Config.NUMERIC_FIELD) # Defaults to 4 hous
|
||||
# Time betwen checks of unused services by os managers
|
||||
# Unused services will be invoked for every machine assigned but not in use AND that has been assigned at least this time
|
||||
# (only if os manager asks for this characteristic)
|
||||
CHECK_UNUSED_TIME = Config.section(GLOBAL_SECTION).value('checkUnusedTime', '631') # Defaults to 10 minutes
|
||||
CHECK_UNUSED_TIME = Config.section(GLOBAL_SECTION).value('checkUnusedTime', '631', type=Config.TEXT_FIELD) # Defaults to 10 minutes
|
||||
# Default CSS Used
|
||||
CSS = Config.section(GLOBAL_SECTION).value('css', settings.STATIC_URL + 'css/uds.css')
|
||||
CSS = Config.section(GLOBAL_SECTION).value('css', settings.STATIC_URL + 'css/uds.css', type=Config.TEXT_FIELD)
|
||||
# Max logins before blocking an account
|
||||
MAX_LOGIN_TRIES = Config.section(GLOBAL_SECTION).value('maxLoginTries', '3')
|
||||
MAX_LOGIN_TRIES = Config.section(GLOBAL_SECTION).value('maxLoginTries', '3', type=Config.NUMERIC_FIELD)
|
||||
# Block time in second for an user that makes too many mistakes, 5 minutes default
|
||||
LOGIN_BLOCK = Config.section(GLOBAL_SECTION).value('loginBlockTime', '300')
|
||||
LOGIN_BLOCK = Config.section(GLOBAL_SECTION).value('loginBlockTime', '300', type=Config.NUMERIC_FIELD)
|
||||
# Do autorun of service if just one service.
|
||||
# 0 = No autorun, 1 = Autorun at login
|
||||
# In a future, maybe necessary another value "2" that means that autorun always
|
||||
AUTORUN_SERVICE = Config.section(GLOBAL_SECTION).value('autorunService', '0')
|
||||
AUTORUN_SERVICE = Config.section(GLOBAL_SECTION).value('autorunService', '0', type=Config.BOOLEAN_FIELD)
|
||||
# Redirect HTTP to HTTPS
|
||||
REDIRECT_TO_HTTPS = Config.section(GLOBAL_SECTION).value('redirectToHttps', '0')
|
||||
REDIRECT_TO_HTTPS = Config.section(GLOBAL_SECTION).value('redirectToHttps', '0', type=Config.BOOLEAN_FIELD)
|
||||
# Max time needed to get a service "fully functional" before it's considered "failed" and removed
|
||||
# The time is in seconds
|
||||
MAX_INITIALIZING_TIME = Config.section(GLOBAL_SECTION).value('maxInitTime', '3600')
|
||||
MAX_INITIALIZING_TIME = Config.section(GLOBAL_SECTION).value('maxInitTime', '3600', type=Config.NUMERIC_FIELD)
|
||||
# Custom HTML for login page
|
||||
CUSTOM_HTML_LOGIN = Config.section(GLOBAL_SECTION).valueLong('customHtmlLogin', '')
|
||||
CUSTOM_HTML_LOGIN = Config.section(GLOBAL_SECTION).value('customHtmlLogin', '', type=Config.LONGTEXT_FIELD)
|
||||
# Maximum logs per user service
|
||||
MAX_LOGS_PER_ELEMENT = Config.section(GLOBAL_SECTION).value('maxLogPerElement', '100')
|
||||
MAX_LOGS_PER_ELEMENT = Config.section(GLOBAL_SECTION).value('maxLogPerElement', '100', type=Config.NUMERIC_FIELD)
|
||||
# Time to restrain a deployed service in case it gives some errors at some point
|
||||
RESTRAINT_TIME = Config.section(GLOBAL_SECTION).value('restrainTime', '600')
|
||||
RESTRAINT_TIME = Config.section(GLOBAL_SECTION).value('restrainTime', '600', type=Config.NUMERIC_FIELD)
|
||||
# Number of errors that must occurr in RESTRAIN_TIME to restrain deployed service
|
||||
RESTRAINT_COUNT = Config.section(GLOBAL_SECTION).value('restrainCount', '3')
|
||||
RESTRAINT_COUNT = Config.section(GLOBAL_SECTION).value('restrainCount', '3', type=Config.NUMERIC_FIELD)
|
||||
|
||||
# Statistics duration, in days
|
||||
STATS_DURATION = Config.section(GLOBAL_SECTION).value('statsDuration', '365')
|
||||
STATS_DURATION = Config.section(GLOBAL_SECTION).value('statsDuration', '365', type=Config.NUMERIC_FIELD)
|
||||
# If disallow login using /login url, and must go to an authenticator
|
||||
DISALLOW_GLOBAL_LOGIN = Config.section(GLOBAL_SECTION).value('disallowGlobalLogin', '0')
|
||||
DISALLOW_GLOBAL_LOGIN = Config.section(GLOBAL_SECTION).value('disallowGlobalLogin', '0', type=Config.BOOLEAN_FIELD)
|
||||
|
||||
# Allowed "trusted sources" for request
|
||||
TRUSTED_SOURCES = Config.section(SECURITY_SECTION).value('Trusted Hosts', '*')
|
||||
TRUSTED_SOURCES = Config.section(SECURITY_SECTION).value('Trusted Hosts', '*', type=Config.TEXT_FIELD)
|
||||
|
||||
# Clusters related vars
|
||||
|
||||
# Maximum desired CPU Load. If cpu is over this value, a migration of a service is "desirable"
|
||||
CLUSTER_MIGRATE_CPULOAD = Config.section(CLUSTER_SECTION).value('Migration CPU Load', '80')
|
||||
CLUSTER_MIGRATE_CPULOAD = Config.section(CLUSTER_SECTION).value('Migration CPU Load', '80', type=Config.NUMERIC_FIELD)
|
||||
# Maximum CPU Load for a node to be elegible for destination of a migration
|
||||
CLUSTER_ELEGIBLE_CPULOAD = Config.section(CLUSTER_SECTION).value('Destination CPU Load', '60')
|
||||
CLUSTER_ELEGIBLE_CPULOAD = Config.section(CLUSTER_SECTION).value('Destination CPU Load', '60', type=Config.NUMERIC_FIELD)
|
||||
# Minimum desired Memory free for a cluster node. If free memory (in %) is under this percentage,
|
||||
# a migration of a service inside this node is "desirable"
|
||||
CLUSTER_MIGRATE_MEMORYLOAD = Config.section(CLUSTER_SECTION).value('Migration Free Memory', '20')
|
||||
CLUSTER_MIGRATE_MEMORYLOAD = Config.section(CLUSTER_SECTION).value('Migration Free Memory', '20', type=Config.NUMERIC_FIELD)
|
||||
# Minimum Free memory for a node to be elegible for a destination of a migration
|
||||
CLUSTER_ELEGIBLE_MEMORYLOAD = Config.section(CLUSTER_SECTION).value('Migration Free Memory', '40')
|
||||
CLUSTER_ELEGIBLE_MEMORYLOAD = Config.section(CLUSTER_SECTION).value('Migration Free Memory', '40', type=Config.NUMERIC_FIELD)
|
||||
|
||||
# Gui vars
|
||||
UDS_THEME = Config.section(GLOBAL_SECTION).value('UDS Theme', 'html5')
|
||||
UDS_THEME = Config.section(GLOBAL_SECTION).value('UDS Theme', 'html5', type=Config.TEXT_FIELD)
|
||||
|
||||
# This is used so templates can change "styles" from admin interface
|
||||
UDS_THEME_VISUAL = Config.section(GLOBAL_SECTION).value('UDS Theme Enhaced', '1')
|
||||
UDS_THEME_VISUAL = Config.section(GLOBAL_SECTION).value('UDS Theme Enhaced', '1', type=Config.BOOLEAN_FIELD)
|
||||
|
||||
initDone = False
|
||||
|
||||
|
@ -0,0 +1,240 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from south.utils import datetime_utils as datetime
|
||||
from south.db import db
|
||||
from south.v2 import SchemaMigration
|
||||
from django.db import models
|
||||
|
||||
|
||||
class Migration(SchemaMigration):
|
||||
|
||||
def forwards(self, orm):
|
||||
# Adding field 'Config.field_type'
|
||||
db.add_column(u'uds_configuration', 'field_type',
|
||||
self.gf('django.db.models.fields.IntegerField')(default=-1),
|
||||
keep_default=False)
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
# Deleting field 'Config.field_type'
|
||||
db.delete_column(u'uds_configuration', 'field_type')
|
||||
|
||||
|
||||
models = {
|
||||
u'uds.authenticator': {
|
||||
'Meta': {'ordering': "(u'name',)", 'object_name': 'Authenticator'},
|
||||
'comments': ('django.db.models.fields.TextField', [], {'default': "u''"}),
|
||||
'data': ('django.db.models.fields.TextField', [], {'default': "u''"}),
|
||||
'data_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}),
|
||||
'priority': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
|
||||
'small_name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '32', 'db_index': 'True'})
|
||||
},
|
||||
u'uds.cache': {
|
||||
'Meta': {'object_name': 'Cache', 'db_table': "u'uds_utility_cache'"},
|
||||
'created': ('django.db.models.fields.DateTimeField', [], {}),
|
||||
'key': ('django.db.models.fields.CharField', [], {'max_length': '64', 'primary_key': 'True'}),
|
||||
'owner': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
|
||||
'validity': ('django.db.models.fields.IntegerField', [], {'default': '60'}),
|
||||
'value': ('django.db.models.fields.TextField', [], {'default': "u''"})
|
||||
},
|
||||
u'uds.config': {
|
||||
'Meta': {'unique_together': "((u'section', u'key'),)", 'object_name': 'Config', 'db_table': "u'uds_configuration'"},
|
||||
'crypt': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'field_type': ('django.db.models.fields.IntegerField', [], {'default': '-1'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'key': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
|
||||
'long': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'section': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
|
||||
'value': ('django.db.models.fields.TextField', [], {'default': "u''"})
|
||||
},
|
||||
u'uds.delayedtask': {
|
||||
'Meta': {'object_name': 'DelayedTask'},
|
||||
'execution_delay': ('django.db.models.fields.PositiveIntegerField', [], {}),
|
||||
'execution_time': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'insert_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'instance': ('django.db.models.fields.TextField', [], {}),
|
||||
'tag': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
|
||||
'type': ('django.db.models.fields.CharField', [], {'max_length': '128'})
|
||||
},
|
||||
u'uds.deployedservice': {
|
||||
'Meta': {'object_name': 'DeployedService', 'db_table': "u'uds__deployed_service'"},
|
||||
'assignedGroups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "u'deployedServices'", 'symmetrical': 'False', 'db_table': "u'uds__ds_grps'", 'to': u"orm['uds.Group']"}),
|
||||
'cache_l1_srvs': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
|
||||
'cache_l2_srvs': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
|
||||
'comments': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '256'}),
|
||||
'current_pub_revision': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'initial_srvs': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
|
||||
'max_srvs': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128'}),
|
||||
'osmanager': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'deployedServices'", 'null': 'True', 'to': u"orm['uds.OSManager']"}),
|
||||
'service': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'deployedServices'", 'null': 'True', 'to': u"orm['uds.Service']"}),
|
||||
'state': ('django.db.models.fields.CharField', [], {'default': "u'A'", 'max_length': '1', 'db_index': 'True'}),
|
||||
'state_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1972, 7, 1, 0, 0)'}),
|
||||
'transports': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "u'deployedServices'", 'symmetrical': 'False', 'db_table': "u'uds__ds_trans'", 'to': u"orm['uds.Transport']"})
|
||||
},
|
||||
u'uds.deployedservicepublication': {
|
||||
'Meta': {'ordering': "(u'publish_date',)", 'object_name': 'DeployedServicePublication', 'db_table': "u'uds__deployed_service_pub'"},
|
||||
'data': ('django.db.models.fields.TextField', [], {'default': "u''"}),
|
||||
'deployed_service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'publications'", 'to': u"orm['uds.DeployedService']"}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'publish_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
|
||||
'revision': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
|
||||
'state': ('django.db.models.fields.CharField', [], {'default': "u'P'", 'max_length': '1', 'db_index': 'True'}),
|
||||
'state_date': ('django.db.models.fields.DateTimeField', [], {})
|
||||
},
|
||||
u'uds.group': {
|
||||
'Meta': {'ordering': "(u'name',)", 'unique_together': "((u'manager', u'name'),)", 'object_name': 'Group'},
|
||||
'comments': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '256'}),
|
||||
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['uds.Group']", 'symmetrical': 'False'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'is_meta': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
|
||||
'manager': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'groups'", 'to': u"orm['uds.Authenticator']"}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
|
||||
'state': ('django.db.models.fields.CharField', [], {'default': "u'A'", 'max_length': '1', 'db_index': 'True'}),
|
||||
'users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "u'groups'", 'symmetrical': 'False', 'to': u"orm['uds.User']"})
|
||||
},
|
||||
u'uds.log': {
|
||||
'Meta': {'object_name': 'Log'},
|
||||
'created': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
|
||||
'data': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'level': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0', 'db_index': 'True'}),
|
||||
'owner_id': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
|
||||
'owner_type': ('django.db.models.fields.SmallIntegerField', [], {'default': '0', 'db_index': 'True'}),
|
||||
'source': ('django.db.models.fields.CharField', [], {'default': "u'internal'", 'max_length': '16', 'db_index': 'True'})
|
||||
},
|
||||
u'uds.network': {
|
||||
'Meta': {'ordering': "(u'name',)", 'object_name': 'Network'},
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
|
||||
'net_end': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
|
||||
'net_start': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
|
||||
'net_string': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128'}),
|
||||
'transports': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "u'networks'", 'symmetrical': 'False', 'db_table': "u'uds_net_trans'", 'to': u"orm['uds.Transport']"})
|
||||
},
|
||||
u'uds.osmanager': {
|
||||
'Meta': {'ordering': "(u'name',)", 'object_name': 'OSManager'},
|
||||
'comments': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
|
||||
'data': ('django.db.models.fields.TextField', [], {'default': "u''"}),
|
||||
'data_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'})
|
||||
},
|
||||
u'uds.provider': {
|
||||
'Meta': {'ordering': "(u'name',)", 'object_name': 'Provider'},
|
||||
'comments': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
|
||||
'data': ('django.db.models.fields.TextField', [], {'default': "u''"}),
|
||||
'data_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'})
|
||||
},
|
||||
u'uds.scheduler': {
|
||||
'Meta': {'object_name': 'Scheduler'},
|
||||
'frecuency': ('django.db.models.fields.PositiveIntegerField', [], {'default': '86400'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'last_execution': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
|
||||
'next_execution': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1972, 7, 1, 0, 0)', 'db_index': 'True'}),
|
||||
'owner_server': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '64', 'db_index': 'True'}),
|
||||
'state': ('django.db.models.fields.CharField', [], {'default': "u'X'", 'max_length': '1', 'db_index': 'True'})
|
||||
},
|
||||
u'uds.service': {
|
||||
'Meta': {'ordering': "(u'name',)", 'unique_together': "((u'provider', u'name'),)", 'object_name': 'Service'},
|
||||
'comments': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
|
||||
'data': ('django.db.models.fields.TextField', [], {'default': "u''"}),
|
||||
'data_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'provider': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'services'", 'to': u"orm['uds.Provider']"})
|
||||
},
|
||||
u'uds.statscounters': {
|
||||
'Meta': {'object_name': 'StatsCounters', 'db_table': "u'uds_stats_c'"},
|
||||
'counter_type': ('django.db.models.fields.SmallIntegerField', [], {'default': '0', 'db_index': 'True'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'owner_id': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
|
||||
'owner_type': ('django.db.models.fields.SmallIntegerField', [], {'default': '0', 'db_index': 'True'}),
|
||||
'stamp': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
|
||||
'value': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'})
|
||||
},
|
||||
u'uds.statsevents': {
|
||||
'Meta': {'object_name': 'StatsEvents', 'db_table': "u'uds_stats_e'"},
|
||||
'event_type': ('django.db.models.fields.SmallIntegerField', [], {'default': '0', 'db_index': 'True'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'owner_id': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
|
||||
'owner_type': ('django.db.models.fields.SmallIntegerField', [], {'default': '0', 'db_index': 'True'}),
|
||||
'stamp': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'})
|
||||
},
|
||||
u'uds.storage': {
|
||||
'Meta': {'object_name': 'Storage'},
|
||||
'attr1': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '64', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
|
||||
'data': ('django.db.models.fields.TextField', [], {'default': "u''"}),
|
||||
'key': ('django.db.models.fields.CharField', [], {'max_length': '64', 'primary_key': 'True'}),
|
||||
'owner': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
|
||||
},
|
||||
u'uds.transport': {
|
||||
'Meta': {'ordering': "(u'name',)", 'object_name': 'Transport'},
|
||||
'comments': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
|
||||
'data': ('django.db.models.fields.TextField', [], {'default': "u''"}),
|
||||
'data_type': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}),
|
||||
'nets_positive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'priority': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'})
|
||||
},
|
||||
u'uds.uniqueid': {
|
||||
'Meta': {'ordering': "(u'-seq',)", 'unique_together': "((u'basename', u'seq'),)", 'object_name': 'UniqueId'},
|
||||
'assigned': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'db_index': 'True'}),
|
||||
'basename': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'owner': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128', 'db_index': 'True'}),
|
||||
'seq': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True'}),
|
||||
'stamp': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'})
|
||||
},
|
||||
u'uds.user': {
|
||||
'Meta': {'ordering': "(u'name',)", 'unique_together': "((u'manager', u'name'),)", 'object_name': 'User'},
|
||||
'comments': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'is_admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'last_access': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1972, 7, 1, 0, 0)'}),
|
||||
'manager': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'users'", 'to': u"orm['uds.Authenticator']"}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}),
|
||||
'parent': ('django.db.models.fields.IntegerField', [], {'default': '-1'}),
|
||||
'password': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128'}),
|
||||
'real_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'staff_member': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'state': ('django.db.models.fields.CharField', [], {'max_length': '1', 'db_index': 'True'})
|
||||
},
|
||||
u'uds.userpreference': {
|
||||
'Meta': {'object_name': 'UserPreference'},
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'module': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32', 'db_index': 'True'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'preferences'", 'to': u"orm['uds.User']"}),
|
||||
'value': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
|
||||
},
|
||||
u'uds.userservice': {
|
||||
'Meta': {'ordering': "(u'creation_date',)", 'object_name': 'UserService', 'db_table': "u'uds__user_service'"},
|
||||
'cache_level': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0', 'db_index': 'True'}),
|
||||
'cluster_node': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '128', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
|
||||
'creation_date': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
|
||||
'data': ('django.db.models.fields.TextField', [], {'default': "u''"}),
|
||||
'deployed_service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'userServices'", 'to': u"orm['uds.DeployedService']"}),
|
||||
'friendly_name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'in_use': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'in_use_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1972, 7, 1, 0, 0)'}),
|
||||
'os_state': ('django.db.models.fields.CharField', [], {'default': "u'P'", 'max_length': '1'}),
|
||||
'publication': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'userServices'", 'null': 'True', 'to': u"orm['uds.DeployedServicePublication']"}),
|
||||
'src_hostname': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '64'}),
|
||||
'src_ip': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '15'}),
|
||||
'state': ('django.db.models.fields.CharField', [], {'default': "u'P'", 'max_length': '1', 'db_index': 'True'}),
|
||||
'state_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
|
||||
'unique_id': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '128', 'db_index': 'True'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "u'userServices'", 'null': 'True', 'blank': 'True', 'to': u"orm['uds.User']"})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['uds']
|
@ -33,7 +33,7 @@
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
__updated__ = '2014-04-24'
|
||||
__updated__ = '2014-06-20'
|
||||
|
||||
from django.db import models
|
||||
|
||||
@ -52,6 +52,7 @@ class Config(models.Model):
|
||||
value = models.TextField(default='')
|
||||
crypt = models.BooleanField(default=False)
|
||||
long = models.BooleanField(default=False)
|
||||
field_type = models.IntegerField(default=-1)
|
||||
|
||||
class Meta:
|
||||
'''
|
||||
|
@ -9,6 +9,7 @@ gui.configuration.link = ->
|
||||
config: data
|
||||
)
|
||||
gui.setLinksEvents()
|
||||
gui.tools.applyCustoms "#form_config"
|
||||
$("#form_config .form-control").each (i, element) ->
|
||||
$(element).attr "data-val", $(element).val()
|
||||
return
|
||||
|
@ -18,9 +18,9 @@
|
||||
<li class="active"><a href="#{{ users }}_tab" data-toggle="tab">{% endverbatim %}{% trans 'Users' %}{% verbatim %}</a></li>
|
||||
<li><a href="#{{ groups }}" data-toggle="tab">{% endverbatim %}{% trans 'Groups' %}{% verbatim %}</a></li>
|
||||
<li><a href="#{{ logs }}" data-toggle="tab">{% endverbatim %}{% trans 'Logs' %}{% verbatim %}</a></li>
|
||||
</ul>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane{% endverbatim %}{% enhaced_visual %} fade {% endenhaced_visual%}{% verbatim %}active" id="{{ users }}_tab">
|
||||
<div class="tab-pane{% endverbatim %}{% enhaced_visual %} fade in{% endenhaced_visual%}{% verbatim %} active" id="{{ users }}_tab">
|
||||
<div class="row">
|
||||
<div class="col-xs-12" id="{{ users }}">
|
||||
</div>
|
||||
|
@ -33,16 +33,20 @@
|
||||
</span>
|
||||
</div>
|
||||
{{ else }}
|
||||
{{# if value.longText }}
|
||||
<textarea class="form-control" id="fld_{{ clean_whitespace ../../../key }}{{ clean_whitespace ../../key }}" data-section="{{ ../../../key }}" data-key="{{ ../../key }}" rows="3">{{ value.value }}</textarea>
|
||||
{{ else }}
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" id="fld_{{ clean_whitespace ../../../key }}{{ clean_whitespace ../../key }}" data-section="{{ ../../../key }}" data-key="{{ ../../key }}" value="{{ value.value }}">
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-default button-undo" type="button" data-fld="fld_{{ clean_whitespace ../../../key }}{{ clean_whitespace ../../key }}"><i class="fa fa-undo"></i> </button>
|
||||
</span>
|
||||
</div>
|
||||
{{/ if }}
|
||||
{{# ifequals value.type 1 }}
|
||||
<textarea class="form-control" id="fld_{{ clean_whitespace ../../../key }}{{ clean_whitespace ../../key }}" data-section="{{ ../../../key }}" data-key="{{ ../../key }}" rows="3">{{ value.value }}</textarea>
|
||||
{{ else }}
|
||||
{{# ifequals value.type 3 }}
|
||||
<input type="checkbox" data-on-label="{% endverbatim %}{% trans 'Yes' %}{% verbatim %}" data-off-label="{% endverbatim %}{% trans 'No' %}{% verbatim %}" class="form-control" id="fld_{{ clean_whitespace ../../../key }}{{ clean_whitespace ../../key }}"{{# ifequals value.value 1 }} checked{{/ ifequals }}>
|
||||
{{ else }}
|
||||
<div class="input-group">
|
||||
<input type="{{# ifequals value.type 2 }}numeric{{ else }}text{{/ ifequals}}" class="form-control" id="fld_{{ clean_whitespace ../../../key }}{{ clean_whitespace ../../key }}" data-section="{{ ../../../key }}" data-key="{{ ../../key }}" value="{{ value.value }}">
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-info button-undo" type="button" data-fld="fld_{{ clean_whitespace ../../../key }}{{ clean_whitespace ../../key }}"><i class="fa fa-undo"></i> </button>
|
||||
</span>
|
||||
</div>
|
||||
{{/ ifequals }}
|
||||
{{/ ifequals }}
|
||||
{{/ if }}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -58,7 +58,7 @@
|
||||
{% ifbrowser ie<10 %}
|
||||
<div class="alert alert-dismissable alert-danger">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
{% trans 'Your browser is supported only partially. Please, upgrade it to a modern html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better)' %}
|
||||
{% trans 'Your browser is supported only partially. Please, upgrade it to a modern html5 browser like Firefox, Chrome, Opera, ... (IE must be 10 or better, and must also disable "Compatibility View Mode" for this site)' %}
|
||||
</div>
|
||||
{% endifbrowser %}
|
||||
{% block messages %}
|
||||
|
@ -64,7 +64,7 @@ class EnhacedVisual(template.Node):
|
||||
self._nodelistFalse = nodelistFalse
|
||||
|
||||
def render(self, context):
|
||||
if GlobalConfig.UDS_THEME_VISUAL.getBool() is True:
|
||||
if GlobalConfig.UDS_THEME_VISUAL.getBool(True) is True:
|
||||
return self._nodelistTrue.render(context)
|
||||
if self._nodelistFalse is None:
|
||||
return ''
|
||||
|
Loading…
x
Reference in New Issue
Block a user