Added new 1.2 tag

This commit is contained in:
Adolfo Gómez 2013-06-25 08:25:44 +00:00
commit 44da266276
37 changed files with 659 additions and 232 deletions

View File

@ -44,6 +44,16 @@ namespace UdsAdmin
[STAThread]
static void Main()
{
string[] args = Environment.GetCommandLineArgs();
foreach (string arg in args)
{
if (arg == "--enabledebug" || arg == "--enabledevel")
UdsAdmin.Properties.Settings.Default.debug = true;
else if (arg == "--disabledebug" || arg == "--disabledevel")
UdsAdmin.Properties.Settings.Default.debug = false;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
CultureInfo culture = new CultureInfo(UdsAdmin.Properties.Settings.Default.Locale);

View File

@ -1,10 +1,10 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Este código fue generado por una herramienta.
// Versión de runtime:4.0.30319.18034
// This code was generated by a tool.
// Runtime Version:4.0.30319.296
//
// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si
// se vuelve a generar el código.
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
@ -127,5 +127,17 @@ namespace UdsAdmin.Properties {
return ((int)(this["StatsItems"]));
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool debug {
get {
return ((bool)(this["debug"]));
}
set {
this["debug"] = value;
}
}
}
}

View File

@ -29,5 +29,8 @@
<Setting Name="StatsItems" Type="System.Int32" Scope="Application">
<Value Profile="(Default)">200</Value>
</Setting>
<Setting Name="debug" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
</Settings>
</SettingsFile>

File diff suppressed because it is too large Load Diff

View File

@ -522,4 +522,13 @@
<data name="confirmDelete" xml:space="preserve">
<value>Are you sure do you want to delete selected items?</value>
</data>
<data name="releaseInUse" xml:space="preserve">
<value>Release "In use" state</value>
</data>
<data name="setActive" xml:space="preserve">
<value>Force to Active</value>
</data>
<data name="setInUse" xml:space="preserve">
<value>Simulate "In use"</value>
</data>
</root>

View File

@ -34,6 +34,9 @@
<setting name="MaxControlWidth" serializeAs="String">
<value>320</value>
</setting>
<setting name="debug" serializeAs="String">
<value>False</value>
</setting>
</UdsAdmin.Properties.Settings>
</userSettings>
<applicationSettings>

View File

@ -65,6 +65,15 @@ namespace UdsAdmin.controls.panel
ToolStripMenuItem assign = new ToolStripMenuItem(Strings.assignToUser); assign.Click += assignToUser; assign.Image = Images.new16;
_assignMenu.Items.AddRange(new ToolStripItem[] { assign });
if (UdsAdmin.Properties.Settings.Default.debug == true)
{
ToolStripSeparator sep = new ToolStripSeparator();
ToolStripMenuItem debug1 = new ToolStripMenuItem(Strings.setActive); debug1.Name = UdsAdmin.gui.ActionTree.SET_ACTIVE_ACTION; debug1.Click += develMenu;
ToolStripMenuItem debug2 = new ToolStripMenuItem(Strings.setInUse); debug2.Name = UdsAdmin.gui.ActionTree.SET_INUSE_ACTION; debug2.Click += develMenu;
ToolStripMenuItem debug3 = new ToolStripMenuItem(Strings.releaseInUse); debug3.Name = UdsAdmin.gui.ActionTree.RELEASE_INUSE_ACTION; debug3.Click += develMenu;
_deleteMenu.Items.AddRange(new ToolStripItem[] { sep, debug1, debug2, debug3 });
}
// Adapt listview to cache or users
if (cache)
{
@ -158,6 +167,31 @@ namespace UdsAdmin.controls.panel
updateList();
}
private void develMenu(object sender, EventArgs e)
{
ToolStripMenuItem s = (ToolStripMenuItem)sender;
if (listView.SelectedItems.Count == 0)
return;
string[] ids = new string[listView.SelectedItems.Count];
int n = 0;
foreach (ListViewItem i in listView.SelectedItems)
ids[n++] = (string)i.Tag;
try
{
xmlrpc.UdsAdminService.DevelAction(s.Name, ids);
}
catch (CookComputing.XmlRpc.XmlRpcFaultException ex)
{
gui.UserNotifier.notifyRpcException(ex);
}
updateList();
}
private void infoItem(object sender, EventArgs e)
{
string id = (string)listView.SelectedItems[0].Tag;

View File

@ -907,7 +907,7 @@
<value>0, 0, 0, 0</value>
</data>
<data name="logViewer1.Size" type="System.Drawing.Size, System.Drawing">
<value>721, 69</value>
<value>721, 70</value>
</data>
<data name="logViewer1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -916,7 +916,7 @@
<value>logViewer1</value>
</data>
<data name="&gt;&gt;logViewer1.Type" xml:space="preserve">
<value>UdsAdmin.controls.panel.LogViewer, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>UdsAdmin.controls.panel.LogViewer, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;logViewer1.Parent" xml:space="preserve">
<value>splitContainer1.Panel2</value>
@ -937,7 +937,7 @@
<value>1</value>
</data>
<data name="splitContainer1.Size" type="System.Drawing.Size, System.Drawing">
<value>721, 474</value>
<value>721, 475</value>
</data>
<data name="splitContainer1.SplitterDistance" type="System.Int32, mscorlib">
<value>397</value>
@ -952,7 +952,7 @@
<value>splitContainer1</value>
</data>
<data name="&gt;&gt;splitContainer1.Type" xml:space="preserve">
<value>UdsAdmin.controls.SplitContainerEx, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>UdsAdmin.controls.SplitContainerEx, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;splitContainer1.Parent" xml:space="preserve">
<value>tabPage1</value>
@ -961,13 +961,13 @@
<value>0</value>
</data>
<data name="tabPage1.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 23</value>
<value>4, 22</value>
</data>
<data name="tabPage1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="tabPage1.Size" type="System.Drawing.Size, System.Drawing">
<value>727, 480</value>
<value>727, 481</value>
</data>
<data name="tabPage1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -997,7 +997,7 @@
<value>3, 240</value>
</data>
<data name="inUseChart.Size" type="System.Drawing.Size, System.Drawing">
<value>715, 231</value>
<value>715, 232</value>
</data>
<data name="inUseChart.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
@ -1006,7 +1006,7 @@
<value>inUseChart</value>
</data>
<data name="&gt;&gt;inUseChart.Type" xml:space="preserve">
<value>UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;inUseChart.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
@ -1030,7 +1030,7 @@
<value>assignedChart</value>
</data>
<data name="&gt;&gt;assignedChart.Type" xml:space="preserve">
<value>UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;assignedChart.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
@ -1048,7 +1048,7 @@
<value>2</value>
</data>
<data name="tableLayoutPanel2.Size" type="System.Drawing.Size, System.Drawing">
<value>721, 474</value>
<value>721, 475</value>
</data>
<data name="tableLayoutPanel2.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
@ -1069,13 +1069,13 @@
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="inUseChart" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="assignedChart" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="Percent,50,Percent,50" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="tabPage2.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 23</value>
<value>4, 22</value>
</data>
<data name="tabPage2.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="tabPage2.Size" type="System.Drawing.Size, System.Drawing">
<value>727, 480</value>
<value>727, 481</value>
</data>
<data name="tabPage2.TabIndex" type="System.Int32, mscorlib">
<value>1</value>

View File

@ -196,7 +196,7 @@
<value>0, 0, 0, 0</value>
</data>
<data name="logViewer1.Size" type="System.Drawing.Size, System.Drawing">
<value>723, 93</value>
<value>723, 94</value>
</data>
<data name="logViewer1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -205,7 +205,7 @@
<value>logViewer1</value>
</data>
<data name="&gt;&gt;logViewer1.Type" xml:space="preserve">
<value>UdsAdmin.controls.panel.LogViewer, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>UdsAdmin.controls.panel.LogViewer, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;logViewer1.Parent" xml:space="preserve">
<value>splitContainer1.Panel2</value>
@ -226,7 +226,7 @@
<value>1</value>
</data>
<data name="splitContainer1.Size" type="System.Drawing.Size, System.Drawing">
<value>723, 476</value>
<value>723, 477</value>
</data>
<data name="splitContainer1.SplitterDistance" type="System.Int32, mscorlib">
<value>375</value>
@ -241,7 +241,7 @@
<value>splitContainer1</value>
</data>
<data name="&gt;&gt;splitContainer1.Type" xml:space="preserve">
<value>UdsAdmin.controls.SplitContainerEx, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>UdsAdmin.controls.SplitContainerEx, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;splitContainer1.Parent" xml:space="preserve">
<value>tabPage1</value>
@ -250,13 +250,13 @@
<value>0</value>
</data>
<data name="tabPage1.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 23</value>
<value>4, 22</value>
</data>
<data name="tabPage1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="tabPage1.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 482</value>
<value>729, 483</value>
</data>
<data name="tabPage1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -295,7 +295,7 @@
<value>assignedChart</value>
</data>
<data name="&gt;&gt;assignedChart.Type" xml:space="preserve">
<value>UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;assignedChart.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -310,7 +310,7 @@
<value>3, 241</value>
</data>
<data name="inUseChart.Size" type="System.Drawing.Size, System.Drawing">
<value>717, 232</value>
<value>717, 233</value>
</data>
<data name="inUseChart.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -319,7 +319,7 @@
<value>inUseChart</value>
</data>
<data name="&gt;&gt;inUseChart.Type" xml:space="preserve">
<value>UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>UdsAdmin.controls.panel.ChartPanel, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;inUseChart.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -337,7 +337,7 @@
<value>2</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>723, 476</value>
<value>723, 477</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -358,13 +358,13 @@
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="assignedChart" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="inUseChart" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100,Absolute,20" /&gt;&lt;Rows Styles="Percent,50,Percent,50" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="tabPage2.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 23</value>
<value>4, 22</value>
</data>
<data name="tabPage2.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="tabPage2.Size" type="System.Drawing.Size, System.Drawing">
<value>729, 482</value>
<value>729, 483</value>
</data>
<data name="tabPage2.TabIndex" type="System.Int32, mscorlib">
<value>1</value>

View File

@ -183,6 +183,10 @@ namespace UdsAdmin.forms
if (cacheServicesBox.Value > maxServicesBox.Value)
maxServicesBox.Value = cacheServicesBox.Value;
// If no L1 cache, L2 cache will not be used, so we reset it to 0
if (cacheL2ServicesBox.Value > 0 && cacheServicesBox.Value == 0)
cacheL2ServicesBox.Value = 0;
_dps.initialServices = (int)initialServicesBox.Value;
_dps.cacheL1 = (int)cacheServicesBox.Value;
_dps.cacheL2 = (int)cacheL2ServicesBox.Value;

View File

@ -415,13 +415,13 @@
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="label3" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="label1" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="osManagerCombo" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="baseServiceCombo" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="label9" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="label8" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="nameBox" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="commentsBox" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,AutoSize,0" /&gt;&lt;Rows Styles="Percent,25,Percent,25,Percent,25,Percent,25" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="Service.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 23</value>
<value>4, 22</value>
</data>
<data name="Service.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="Service.Size" type="System.Drawing.Size, System.Drawing">
<value>440, 197</value>
<value>440, 198</value>
</data>
<data name="Service.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -529,13 +529,13 @@
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="label4" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="allowedTransports" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100,Absolute,20" /&gt;&lt;Rows Styles="Absolute,24,Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="Transports.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 23</value>
<value>4, 22</value>
</data>
<data name="Transports.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="Transports.Size" type="System.Drawing.Size, System.Drawing">
<value>440, 197</value>
<value>440, 198</value>
</data>
<data name="Transports.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -829,13 +829,13 @@
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="cacheL2ServicesBox" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="cacheL2Label" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="cacheServicesBox" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="label5" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="cacheLabel" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="initialServicesBox" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="label7" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="maxServicesBox" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="AutoSize,0,Percent,100" /&gt;&lt;Rows Styles="Percent,25,Percent,25,Percent,25,Percent,25" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="Cache.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 23</value>
<value>4, 22</value>
</data>
<data name="Cache.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="Cache.Size" type="System.Drawing.Size, System.Drawing">
<value>440, 197</value>
<value>440, 198</value>
</data>
<data name="Cache.TabIndex" type="System.Int32, mscorlib">
<value>2</value>

View File

@ -72,6 +72,7 @@
//
resources.ApplyResources(this.treeActions, "treeActions");
this.treeActions.HideSelection = false;
this.treeActions.MinimumSize = new System.Drawing.Size(200, 4);
this.treeActions.Name = "treeActions";
this.treeActions.ShowNodeToolTips = true;
this.treeActions.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeActions_BeforeExpand);

View File

@ -123,7 +123,7 @@
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="splitContainer1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 50</value>
<value>0, 49</value>
</data>
<data name="treeActions.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
@ -131,11 +131,8 @@
<data name="treeActions.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="treeActions.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>200, 4</value>
</data>
<data name="treeActions.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 376</value>
<value>200, 377</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="treeActions.TabIndex" type="System.Int32, mscorlib">
@ -184,7 +181,7 @@
<value>32</value>
</data>
<data name="splitContainer1.Size" type="System.Drawing.Size, System.Drawing">
<value>610, 376</value>
<value>610, 377</value>
</data>
<data name="splitContainer1.SplitterDistance" type="System.Int32, mscorlib">
<value>146</value>
@ -199,7 +196,7 @@
<value>splitContainer1</value>
</data>
<data name="&gt;&gt;splitContainer1.Type" xml:space="preserve">
<value>UdsAdmin.controls.SplitContainerEx, UdsAdmin, Version=1.1.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>UdsAdmin.controls.SplitContainerEx, UdsAdmin, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;splitContainer1.Parent" xml:space="preserve">
<value>$this</value>
@ -238,61 +235,61 @@
<value>133, 17</value>
</metadata>
<data name="exitToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>102, 22</value>
<value>92, 22</value>
</data>
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
<value>Exit</value>
</data>
<data name="fileToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>42, 21</value>
<value>37, 20</value>
</data>
<data name="fileToolStripMenuItem.Text" xml:space="preserve">
<value>File</value>
</data>
<data name="englishToolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>127, 22</value>
<value>116, 22</value>
</data>
<data name="englishToolStripMenuItem1.Text" xml:space="preserve">
<value>English</value>
</data>
<data name="spanishToolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>127, 22</value>
<value>116, 22</value>
</data>
<data name="spanishToolStripMenuItem1.Text" xml:space="preserve">
<value>Spanish</value>
</data>
<data name="frenchToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>127, 22</value>
<value>116, 22</value>
</data>
<data name="frenchToolStripMenuItem.Text" xml:space="preserve">
<value>French</value>
</data>
<data name="germanToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>127, 22</value>
<value>116, 22</value>
</data>
<data name="germanToolStripMenuItem.Text" xml:space="preserve">
<value>German</value>
</data>
<data name="languageToolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>165, 22</value>
<value>148, 22</value>
</data>
<data name="languageToolStripMenuItem1.Text" xml:space="preserve">
<value>Language</value>
</data>
<data name="configurationToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>165, 22</value>
<value>148, 22</value>
</data>
<data name="configurationToolStripMenuItem.Text" xml:space="preserve">
<value>Configuration</value>
</data>
<data name="aboutToolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>165, 22</value>
<value>148, 22</value>
</data>
<data name="aboutToolStripMenuItem1.Text" xml:space="preserve">
<value>About</value>
</data>
<data name="toolsToolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 21</value>
<value>48, 20</value>
</data>
<data name="toolsToolStripMenuItem1.Text" xml:space="preserve">
<value>Tools</value>
@ -301,7 +298,7 @@
<value>0, 0</value>
</data>
<data name="menuStrip1.Size" type="System.Drawing.Size, System.Drawing">
<value>610, 25</value>
<value>610, 24</value>
</data>
<data name="menuStrip1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -322,13 +319,13 @@
<value>3</value>
</data>
<data name="newServiceProviderMenu.Size" type="System.Drawing.Size, System.Drawing">
<value>106, 22</value>
<value>98, 22</value>
</data>
<data name="newServiceProviderMenu.Text" xml:space="preserve">
<value>New</value>
</data>
<data name="testToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>106, 22</value>
<value>98, 22</value>
</data>
<data name="serviceProviderToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>103, 20</value>
@ -340,13 +337,13 @@
<value>32, 19</value>
</data>
<data name="spanishToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>126, 22</value>
<value>115, 22</value>
</data>
<data name="spanishToolStripMenuItem.Text" xml:space="preserve">
<value>Spanish</value>
</data>
<data name="englishToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>126, 22</value>
<value>115, 22</value>
</data>
<data name="englishToolStripMenuItem.Text" xml:space="preserve">
<value>English</value>
@ -379,7 +376,7 @@
<value>Clears the cache</value>
</data>
<data name="toolStrip1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 25</value>
<value>0, 24</value>
</data>
<data name="toolStrip1.Size" type="System.Drawing.Size, System.Drawing">
<value>610, 25</value>

View File

@ -72,6 +72,9 @@ namespace UdsAdmin.gui
public const string DELETE_ACTION = "delete";
public const string CHECK_ACTION = "test";
public const string PUBLISH_ACTION = "publish";
public const string SET_ACTIVE_ACTION = "activate";
public const string SET_INUSE_ACTION = "inUse";
public const string RELEASE_INUSE_ACTION = "releaseInUse";
private static Dictionary<string, xmlrpc.ServiceType[]> stCache = new Dictionary<string, xmlrpc.ServiceType[]>();

View File

@ -209,6 +209,7 @@ namespace UdsAdmin.gui
ContextMenuStrip menu = new ContextMenuStrip();
ToolStripMenuItem modify = new ToolStripMenuItem(Strings.modifyItem); modify.Name = ActionTree.MODIFY_ACTION; modify.Click += action;
ToolStripMenuItem delete = new ToolStripMenuItem(Strings.deleteItem); delete.Name = ActionTree.DELETE_ACTION; delete.Click += action;
menu.Items.AddRange(new ToolStripItem[] { modify, delete});
if (dps.info.needsPublication)
{
@ -216,6 +217,7 @@ namespace UdsAdmin.gui
ToolStripMenuItem publish = new ToolStripMenuItem(Strings.publish); publish.Name = ActionTree.PUBLISH_ACTION; publish.Click += action;
menu.Items.AddRange(new ToolStripItem[] {sep, publish });
}
return menu;
}

View File

@ -354,6 +354,13 @@ namespace UdsAdmin.xmlrpc
GuiFieldValue[] InvokeChooseCallback(string credentials, string name, GuiFieldValue[] parameters);
// Devel stuff
[XmlRpcMethod("develAction")]
bool DevelAction(string credentials, string action, string[] ids);
}
}

View File

@ -768,5 +768,12 @@ namespace UdsAdmin.xmlrpc
}
// Devel stuff
public static bool DevelAction(string action, string[] ids)
{
return s.DevelAction(credentials, action, ids);
}
}
}

View File

@ -69,7 +69,7 @@
<dependency>
<groupId>net.sourceforge.guacamole</groupId>
<artifactId>guacamole-common-js</artifactId>
<version>0.7.1</version>
<version>0.7.2</version>
<type>zip</type>
<scope>runtime</scope>
</dependency>

Binary file not shown.

View File

@ -94,6 +94,9 @@ public class LinuxApplet implements OsApplet {
else
exec.add("-g" + width + "x" + height);
if (redirectSmartcards)
exec.add("-rscard");
exec.add("-TUDS-RDP");
exec.add("-P");
@ -107,7 +110,7 @@ public class LinuxApplet implements OsApplet {
}
if( redirectDrives )
exec.add("-rdisk:home=\"" + home + "\"");
exec.add("-rdisk:home=" + home);
if( redirectAudio )
exec.add("-rsound:local");

View File

@ -1,5 +1,7 @@
package es.virtualcable.rdp;
// More info about RDP files: http://technet.microsoft.com/en-us/library/ff393699%28WS.10%29.aspx
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

View File

@ -10,7 +10,7 @@ import es.virtualcable.rdp.util;
public class WindowsApplet implements OsApplet {
private static final String MSTSC_CMD = "c:\\windows\\system32\\mstsc.exe";
private static final String MSTSC_CMD_REL = "\\system32\\mstsc.exe";
private Hashtable<String,String> params;
private String scrWidth;
@ -108,6 +108,7 @@ public class WindowsApplet implements OsApplet {
private void executeTunnel() throws IOException
{
String java = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java.exe";
String MSTSC_CMD = System.getenv("SystemRoot") + MSTSC_CMD_REL;
String [] cmd = { java, "-jar", jarFileName, tunPort, MSTSC_CMD, rdpFileName };
ProcessBuilder pb = new ProcessBuilder( cmd );
Map<String,String> env = pb.environment();
@ -120,6 +121,7 @@ public class WindowsApplet implements OsApplet {
private void executeDirect() throws IOException
{
String MSTSC_CMD = System.getenv("SystemRoot") + MSTSC_CMD_REL;
Runtime.getRuntime().exec( MSTSC_CMD + " \"" + rdpFileName + "\"" );
}

View File

@ -82,13 +82,15 @@ class InternalDBAuth(Authenticator):
# and access will be denied
try:
usr = auth.users.get(name=username, state=State.ACTIVE)
parent = usr.id
usr.id = None
if usr.real_name.strip() == '':
usr.real_name = usr.name
usr.name = newUsername
usr.parent = parent
usr.save()
except:
logger.exception('Exception')
pass # User already exists
username = newUsername
return username
@ -101,6 +103,9 @@ class InternalDBAuth(Authenticator):
if len(usr) == 0:
return False
usr = usr[0]
if usr.parent != -1: # Direct auth not allowed for "derived" users
return False
# Internal Db Auth has its own groups, and if it active it is valid
if usr.password == hashlib.sha1(credentials).hexdigest():
groupsManager.validate([g.name for g in usr.groups.all()])

View File

@ -55,8 +55,8 @@ class RegexLdap(auths.Authenticator):
ldapBase = gui.TextField(length=64, label = _('Base'), order = 7, tooltip = _('Common search base (used for "users" and "groups"'), required = True)
userClass = gui.TextField(length=64, label = _('User class'), defvalue = 'posixAccount', order = 8, tooltip = _('Class for LDAP users (normally posixAccount)'), required = True)
userIdAttr = gui.TextField(length=64, label = _('User Id Attr'), defvalue = 'uid', order = 9, tooltip = _('Attribute that contains the user id'), required = True)
userNameAttr = gui.TextField(length=64, label = _('User Name Attr'), multiline=2, defvalue = 'uid', order = 10, tooltip = _('Attributes that contains the user name (list of comma separated values)'), required = True)
groupNameAttr = gui.TextField(length=64, label = _('Group Name Attr'), multiline=2, defvalue = 'cn', order = 11, tooltip = _('Attribute that contains the group name'), required = True)
userNameAttr = gui.TextField(length=640, label = _('User Name Attr'), multiline=2, defvalue = 'uid', order = 10, tooltip = _('Attributes that contains the user name (list of comma separated values)'), required = True)
groupNameAttr = gui.TextField(length=640, label = _('Group Name Attr'), multiline=2, defvalue = 'cn', order = 11, tooltip = _('Attribute that contains the group name'), required = True)
#regex = gui.TextField(length=64, label = _('Regular Exp. for groups'), defvalue = '^(.*)', order = 12, tooltip = _('Regular Expression to extract the group name'), required = True)
typeName = _('Regex LDAP Authenticator')
@ -129,7 +129,7 @@ class RegexLdap(auths.Authenticator):
res = []
for line in field.splitlines():
equalPos = line.find('=')
if line.find('=') != -1:
if equalPos != -1:
attr = line[:equalPos]
else:
attr = line
@ -137,11 +137,10 @@ class RegexLdap(auths.Authenticator):
return res
def __processField(self, field, attributes):
import re
res = []
for line in field.splitlines():
equalPos = line.find('=')
if line.find('=') != -1:
if equalPos != -1:
attr, pattern = (line[:equalPos], line[equalPos+1:])
attr = attr.lower()
# if pattern do not have groups, define one with full re

View File

@ -86,9 +86,7 @@ class User(object):
else:
# From db
usr = DbUser.objects.get(pk=self._dbUser.id)
self._groups = []
for g in usr.getGroups():
self._groups.append(Group(g))
self._groups = [Group(g) for g in usr.getGroups()]
return self._groups

View File

@ -88,7 +88,7 @@ class PublicationFinishChecker(DelayedTask):
if State.isPreparing(prevState):
dsp.deployed_service.publications.filter(state=State.USABLE).update(state=State.REMOVABLE)
dsp.setState(State.USABLE)
dsp.deployed_service.markOldDeployedServicesAsRemovables(dsp)
dsp.deployed_service.markOldUserServicesAsRemovables(dsp)
elif State.isRemoving(prevState):
dsp.setState(State.REMOVED)
else: # State is canceling

View File

@ -447,14 +447,17 @@ class UserServiceManager(object):
UserServiceOpChecker.makeUnique(uService, ui, state)
return False
@transaction.commit_on_success
def checkForRemoval(self, uService):
uService = UserService.objects.select_for_update().get(id=uService.id)
'''
This method is used by UserService when a request for setInUse(False) is made
This checks that the service can continue existing or not
'''
#uService = UserService.objects.select_for_update().get(id=uService.id)
if uService.publication == None:
return
if uService.publication.id != uService.deployed_service.activePublication().id:
logger.debug('Old revision of user service, marking as removable: {0}'.format(uService))
uService.setState(State.REMOVABLE)
uService.remove()
def notifyReadyFromOsManager(self, uService, data):

View File

@ -42,6 +42,8 @@ class UniqueNameGenerator(UniqueIDGenerator):
super(UniqueNameGenerator, self).__init__('name', owner, )
def __toName(self, seq, length):
if seq == -1:
raise KeyError('No more names available. Please, increase service digits.')
return "%s%0*d" % (self._baseName, length, seq)
def get(self, baseName, length=5):

View File

@ -52,7 +52,7 @@ class PublicationInfoItemsCleaner(Job):
super(PublicationInfoItemsCleaner,self).__init__(environment)
def run(self):
removeFrom = getSqlDatetime() - timedelta(seconds = GlobalConfig.KEEP_INFO_TIME.getInt())
removeFrom = getSqlDatetime() - timedelta(seconds = GlobalConfig.KEEP_INFO_TIME.getInt(True))
DeployedServicePublication.objects.filter(state__in=State.INFO_STATES, state_date__lt=removeFrom).delete()
class PublicationCleaner(Job):
@ -63,13 +63,18 @@ class PublicationCleaner(Job):
super(PublicationCleaner,self).__init__(environment)
def run(self):
removables = DeployedServicePublication.objects.filter(state=State.REMOVABLE)[0:3]
removables = DeployedServicePublication.objects.filter(state=State.REMOVABLE)
for removable in removables:
try:
PublicationManager.manager().unpublish(removable)
except PublishException: # Can say that it cant be removed right now
logger.debug('Delaying removal')
pass
# Now check too long "in use" services for all publications
now = getSqlDatetime()
removeFrom = now - timedelta(hours = GlobalConfig.SESSION_EXPIRE_TIME.getInt(True))
for dsp in removables.filter(state_date__lt=removeFrom):
activePub = dsp.deployed_service.activePublication()
dsp.deployed_service.userServices.filter(in_use=True).update(in_use=False, state_date=now)
dsp.deployed_service.markOldUserServicesAsRemovables(activePub)

View File

@ -0,0 +1,238 @@
# -*- coding: utf-8 -*-
import 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 'User.parent'
db.add_column(u'uds_user', 'parent',
self.gf('django.db.models.fields.IntegerField')(default=-1),
keep_default=False)
def backwards(self, orm):
# Deleting field 'User.parent'
db.delete_column(u'uds_user', 'parent')
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'}),
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': "'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': "'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': "'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': {'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': "'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'}),
'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': "'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': "'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']

View File

@ -671,6 +671,7 @@ class User(models.Model):
staff_member = models.BooleanField(default = False) # Staff members can login to admin
is_admin = models.BooleanField(default = False) # is true, this is a super-admin
last_access = models.DateTimeField(default=NEVER)
parent = models.IntegerField(default=-1)
class Meta:
'''
@ -741,12 +742,20 @@ class User(models.Model):
'''
returns the groups (and metagroups) this user belongs to
'''
if self.parent != -1:
try:
usr = User.objects.get(id=self.parent)
except: # If parent do not exists
usr = self
else:
usr = self
grps = list()
for g in self.groups.filter(is_meta=False):
for g in usr.groups.filter(is_meta=False):
grps += (g.id,)
yield g
# Locate metagroups
for g in Group.objects.filter(manager__id=self.manager.id, is_meta=True):
for g in Group.objects.filter(manager__id=usr.manager.id, is_meta=True):
gn = g.groups.filter(id__in=grps).count()
if gn == g.groups.count(): # If a meta group is empty, all users belongs to it. we can use gn != 0 to check that if it is empty, is not valid
# This group matches
@ -772,6 +781,9 @@ class User(models.Model):
# be removed
toDelete.getManager().removeUser(toDelete.name)
# now removes all "child" of this user, if it has children
User.objects.filter(parent=toDelete.id).delete()
# Remove related logs
log.clearLogs(toDelete)
@ -994,7 +1006,7 @@ class DeployedService(models.Model):
self.setState(State.REMOVED)
def markOldDeployedServicesAsRemovables(self, activePub):
def markOldUserServicesAsRemovables(self, activePub):
'''
Used when a new publication is finished.
@ -1061,7 +1073,7 @@ class DeployedService(models.Model):
# Now get deployed services that DO NOT NEED publication
doNotNeedPublishing = [ t.type() for t in services.factory().servicesThatDoNotNeedPublication() ]
list2 = DeployedService.objects.filter(assignedGroups__in=groups, assignedGroups__state__exact=State.ACTIVE, service__data_type__in=doNotNeedPublishing, state = State.ACTIVE)
return [ r for r in list1 ] + [ r for r in list2 ]
return list(set([ r for r in list1 ] + [ r for r in list2 ]))
def publish(self):
@ -1267,6 +1279,9 @@ class DeployedServicePublication(models.Model):
logger.debug('Deleted publication {0}'.format(toDelete))
def __unicode__(self):
return 'Publication {0}, rev {1}, state {2}'.format(self.deployed_service.name, self.revision, State.toString(self.state))
# Connects a pre deletion signal to Authenticator

View File

@ -137,8 +137,10 @@ class LinuxOsManager(osmanagers.OSManager):
notifyReady = True
self.notifyIp(service.unique_id, si, data)
service.updateData(si)
service.setInUse(inUse)
service.setOsState(state)
# If notifyReady is not true, save state, let UserServiceManager do it for us else
if doRemove is True:
service.remove()

View File

@ -153,8 +153,10 @@ class WindowsOsManager(osmanagers.OSManager):
notifyReady = True
self.notifyIp(service.unique_id, si, data)
service.updateData(si)
service.setInUse(inUse)
service.setOsState(state)
# If notifyReady is not true, save state, let UserServiceManager do it for us else
if doRemove is True:
service.remove()

View File

@ -42,6 +42,8 @@ logger = logging.getLogger(__name__)
opCreate, opStart, opStop, opSuspend, opRemove, opWait, opError, opFinish, opRetry, opChangeMac = range(10)
NO_MORE_NAMES = 'NO-NAME-ERROR'
class OVirtLinkedDeployment(UserDeployment):
'''
This class generates the user consumable elements of the service tree.
@ -103,7 +105,10 @@ class OVirtLinkedDeployment(UserDeployment):
generate more names. (Generator are simple utility classes)
'''
if self._name == '':
self._name = self.nameGenerator().get( self.service().getBaseName(), self.service().getLenName() )
try:
self._name = self.nameGenerator().get( self.service().getBaseName(), self.service().getLenName() )
except KeyError:
return NO_MORE_NAMES
return self._name
@ -323,7 +328,11 @@ class OVirtLinkedDeployment(UserDeployment):
Deploys a machine from template for user/cache
'''
templateId = self.publication().getTemplateId()
name = self.service().sanitizeVmName(self.getName()) # oVirt don't let us to create machines with more than 15 chars!!!
name = self.getName()
if name == NO_MORE_NAMES:
raise Exception('No more names available for this service. (Increase digits for this service to fix)')
name = self.service().sanitizeVmName(name) # oVirt don't let us to create machines with more than 15 chars!!!
comments = 'UDS Linked clone'
self._vmid = self.service().deployFromTemplate(name, comments, templateId)

View File

@ -138,7 +138,7 @@ def modifyUser(credentials, usr):
user.state = usr['state']
user.save()
# Now add/removes groups acordly
if auth.isExternalSource == False:
if auth.isExternalSource == False and user.parent == -1:
newGrps = {}
knownGrps = user.groups.all()
# Add new groups, and keep a dict of all groups selected

View File

@ -153,6 +153,28 @@ def getUserDeployedServiceError(credentials, idService):
raise FindException(_('User deployed service not found!!!'))
return error
@needs_credentials
def develAction(credentials, action, ids ):
logger.debug('Devel action invoked: {0} for {1}'.format(action, ids))
try:
for uds in UserService.objects.filter(id__in=ids):
if action == "inUse":
logger.debug('Setting {0} to in use'.format(uds.friendly_name))
uds.setInUse(True)
elif action == "releaseInUse":
logger.debug('Releasing in use from {0}'.format(uds.friendly_name))
uds.setState(State.USABLE)
uds.setInUse(False)
else:
logger.debug('Setting {0} to usable'.format(uds.friendly_name))
uds.setState(State.USABLE)
if uds.needsOsManager():
uds.setOsState(State.USABLE)
uds.save()
except UserService.DoesNotExist:
raise FindException(_('User deployed service not found!!!'))
return True
# Registers XML RPC Methods
def registerUserDeployedServiceFunctions(dispatcher):
dispatcher.register_function(getCachedDeployedServices, 'getCachedDeployedServices')
@ -161,3 +183,4 @@ def registerUserDeployedServiceFunctions(dispatcher):
dispatcher.register_function(assignDeployedService, 'assignDeployedService')
dispatcher.register_function(removeUserService, 'removeUserService')
dispatcher.register_function(getUserDeployedServiceError, 'getUserDeployedServiceError')
dispatcher.register_function(develAction, "develAction")