(1) power users obtain nr.6 on startup, (2) maxBatchNr from DB detected and used, (3) more logging, ver. 2.4.258.

This commit is contained in:
Milan Hanajik
2016-04-07 13:52:57 +02:00
parent a275a911f6
commit 2d20ea1196
5 changed files with 160 additions and 90 deletions
+7 -2
View File
@@ -7,12 +7,15 @@ using System.Security.Cryptography;
using System.Text; using System.Text;
using System.Diagnostics; using System.Diagnostics;
using Config.Resources; using Config.Resources;
using log4net;
namespace Config.Entities namespace Config.Entities
{ {
public class User public class User
{ {
public virtual int Id { get; protected set; } static readonly ILog log = LogManager.GetLogger(typeof(User));
public virtual int Id { get; protected set; }
public virtual string Name { get; set; } public virtual string Name { get; set; }
public virtual int Number { get; set; } public virtual int Number { get; set; }
public virtual string Password { get; set; } public virtual string Password { get; set; }
@@ -140,6 +143,7 @@ namespace Config.Entities
{ {
currentUser = this; currentUser = this;
lastAuthorization = DateTime.Now; lastAuthorization = DateTime.Now;
log.FatalFormat("Power user '{0}' authorized @level '{1}'", userName, requiredGroupMembership);
return true; return true;
} }
@@ -149,7 +153,8 @@ namespace Config.Entities
{ {
currentUser = this; currentUser = this;
lastAuthorization = DateTime.Now; lastAuthorization = DateTime.Now;
return true; log.FatalFormat("User '{0}' authorized @level '{1}'", userName, requiredGroupMembership);
return true;
} }
else else
{ {
+17
View File
@@ -182,6 +182,23 @@ namespace Results
WaterMeterDataList = session.CreateQuery("FROM WaterMeterData").List<Entities.WaterMeterData>(); WaterMeterDataList = session.CreateQuery("FROM WaterMeterData").List<Entities.WaterMeterData>();
} }
/// <summary>
/// Loads shared data from the database
/// </summary>
/// <exception>Throws NHibernate exceptions</exception>
public static int GetMaxSavedBatchNr()
{
ISession session = DB.CreateSession();
IList<Entities.Batch> batches = session.CreateQuery("FROM Batch").List<Entities.Batch>();
int maxBatchNr = 0;
foreach (var b in batches)
{
if (b.BatchNr > maxBatchNr) maxBatchNr = b.BatchNr;
}
return maxBatchNr;
}
/// <summary> /// <summary>
/// Update TestData, Components and WaterMeterData fo tests and water meters in batch results /// Update TestData, Components and WaterMeterData fo tests and water meters in batch results
@@ -21,6 +21,17 @@ namespace TBF.BenchControl.Sequences
public override string ToString() { return "Sequences.MainSeq"; } public override string ToString() { return "Sequences.MainSeq"; }
int simultWithPurgingCount;
Generic.IComponentCfg simultWithPurgingCfg;
IList<Config.Entities.Test> simultWithPurgingTests;
IList<Generic.ITestParams> simultWithPurgingParams;
int simultWithEvacuationCount;
Generic.IComponentCfg simultWithEvacuationCfg;
IList<Config.Entities.Test> simultWithEvacuationTests;
IList<Generic.ITestParams> simultWithEvacuationParams;
System.Windows.Forms.Form modelessDlg; System.Windows.Forms.Form modelessDlg;
/// ///
delegate void iPerlCommFormDlgt(MainSeq myRef, Generic.IComponentCfg cfg, IList<Test> tests, IList<Generic.ITestParams> multiTestParams); delegate void iPerlCommFormDlgt(MainSeq myRef, Generic.IComponentCfg cfg, IList<Test> tests, IList<Generic.ITestParams> multiTestParams);
@@ -65,7 +76,11 @@ namespace TBF.BenchControl.Sequences
/// <summary> Constructor </summary> /// <summary> Constructor </summary>
public MainSeq() public MainSeq()
{ {
} simultWithPurgingTests = new List<Config.Entities.Test>();
simultWithPurgingParams = new List<Generic.ITestParams>();
simultWithEvacuationTests = new List<Config.Entities.Test>();
simultWithEvacuationParams = new List<Generic.ITestParams>();
}
/// <summary> /// <summary>
@@ -82,15 +97,15 @@ namespace TBF.BenchControl.Sequences
Selection selection; Selection selection;
bool benchFilled = false; bool benchFilled = false;
int simultWithPurgingCount = 0; simultWithPurgingCount = 0;
Generic.IComponentCfg simultWithPurgingCfg = null; simultWithPurgingCfg = null;
IList<Config.Entities.Test> simultWithPurgingTests = new List<Config.Entities.Test>(); simultWithPurgingTests.Clear();
IList<Generic.ITestParams> simultWithPurgingParams = new List<Generic.ITestParams>(); simultWithPurgingParams.Clear();
int simultWithEvacuationCount = 0; simultWithEvacuationCount = 0;
Generic.IComponentCfg simultWithEvacuationCfg = null; simultWithEvacuationCfg = null;
IList<Config.Entities.Test> simultWithEvacuationTests = new List<Config.Entities.Test>(); simultWithEvacuationTests.Clear();
IList<Generic.ITestParams> simultWithEvacuationParams = new List<Generic.ITestParams>(); simultWithEvacuationParams.Clear();
StateMachine.LoadProcedure(true); // TODO: Implement as an operation so that the worker thread is not blocked StateMachine.LoadProcedure(true); // TODO: Implement as an operation so that the worker thread is not blocked
@@ -213,7 +228,7 @@ namespace TBF.BenchControl.Sequences
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
select_procedure: select_procedure:
/// Make sure the CycleBeginForm is closed (aftrer an abnormal procedure/test end, etc.) /// Make sure the CycleBeginForm is closed (after an abnormal procedure/test end, etc.)
CloseBeginForm(); CloseBeginForm();
selection = MakeSelection(MKSelContext.ProcedureNotSelected); selection = MakeSelection(MKSelContext.ProcedureNotSelected);
@@ -228,7 +243,9 @@ namespace TBF.BenchControl.Sequences
/// ///
StateMachine.LoadProcedureParams(StateMachine.Procedure); StateMachine.LoadProcedureParams(StateMachine.Procedure);
///
/// Prepare new water meters /// Prepare new water meters
///
foreach (var wm in WaterMeters) wm.ClearData(); /// Clean water meter data foreach (var wm in WaterMeters) wm.ClearData(); /// Clean water meter data
bool compound = (StateMachine.Procedure.MetersKind == MetersKind.Combined); bool compound = (StateMachine.Procedure.MetersKind == MetersKind.Combined);
@@ -259,14 +276,16 @@ namespace TBF.BenchControl.Sequences
#endif #endif
} }
///
/// Prepare empty results /// Prepare empty results
///
BatchRslts = Results.BatchResults.NewFromProcedure(Program.LocalSettings.BatchNr, BatchRslts = Results.BatchResults.NewFromProcedure(Program.LocalSettings.BatchNr,
(BenchInfo != null) ? BenchInfo.TestBenchId : 1, (BenchInfo != null) ? BenchInfo.TestBenchId : 1,
User.CurrentUser.Name, User.CurrentUser.Number, Program.Version, User.CurrentUser.Name, User.CurrentUser.Number, Program.Version,
StateMachine.Procedure, waterMeterData, waterMeterParts); StateMachine.Procedure, waterMeterData, waterMeterParts);
StateMachine.CycleStartTimeStamp = BatchRslts.Batch.StartTime; StateMachine.CycleStartTimeStamp = BatchRslts.Batch.StartTime;
Bridge.OnProcedureSelected(this, new ProcedureSelectedEventArgs(StateMachine.Procedure)); Bridge.OnProcedureSelected(this, new ProcedureSelectedEventArgs(StateMachine.Procedure));
/// Display 'Cycle Begin Form' /// Display 'Cycle Begin Form'
@@ -305,76 +324,7 @@ namespace TBF.BenchControl.Sequences
fill_the_bench: fill_the_bench:
/// CollectSimultSteps();
/// Collect steps (e.g. iPerl communication) to be done simultaneously with purging
///
simultWithPurgingCount = 0;
simultWithPurgingCfg = null;
simultWithPurgingTests.Clear();
simultWithPurgingParams.Clear();
///
foreach (var test in StateMachine.Tests)
{
Generic.IComponent testMethodComp = TbfComponents.FindComponent(test.Method);
if (testMethodComp == null) break;
testMethodComp.Cfg.UpdateTestParams(test);
ISimultTestMethod simultTest = testMethodComp as ISimultTestMethod;
MetersPath sensPath = StateMachine.GetMetersPath(test);
if (simultTest == null || !simultTest.SimultWithPrevious || sensPath == null) break;
if (simultWithPurgingCount == 0)
{
simultWithPurgingCfg = simultTest.Cfg;
}
else if (simultTest.Cfg != simultWithPurgingCfg)
{
break;
}
simultWithPurgingTests.Add(test);
simultWithPurgingParams.Add(testMethodComp.Cfg.GetTestParams().Clone() as Generic.ITestParams);
simultWithPurgingCount++;
}
///
/// Collect steps (e.g. iPerl communication) to be done simultaneously with evacuation
///
simultWithEvacuationCount = 0;
simultWithEvacuationCfg = null;
simultWithEvacuationTests.Clear();
simultWithEvacuationParams.Clear();
///
for (int i = StateMachine.Tests.Count - 1; i >= simultWithPurgingCount; i--)
{
var test = StateMachine.Tests[i];
Generic.IComponent testMethodComp = TbfComponents.FindComponent(test.Method);
if (testMethodComp == null) break;
testMethodComp.Cfg.UpdateTestParams(test);
ISimultTestMethod simultTest = testMethodComp as ISimultTestMethod;
MetersPath sensPath = StateMachine.GetMetersPath(test);
if (simultTest == null || !simultTest.SimultWithNext || sensPath == null) break;
if (simultWithEvacuationCount == 0)
{
simultWithEvacuationCfg = simultTest.Cfg;
}
else if (simultTest.Cfg != simultWithEvacuationCfg)
{
break;
}
simultWithEvacuationTests.Insert(0, test);
simultWithEvacuationParams.Insert(0, testMethodComp.Cfg.GetTestParams().Clone() as Generic.ITestParams);
simultWithEvacuationCount++;
}
/// ///
if (simultWithPurgingCount > 0) if (simultWithPurgingCount > 0)
{ {
@@ -465,6 +415,10 @@ namespace TBF.BenchControl.Sequences
Bridge.Bench2UI(ButtonsEtc.StopBtnEn); /// Hide buttons Bridge.Bench2UI(ButtonsEtc.StopBtnEn); /// Hide buttons
if (selection != Selection.Cycle)
{
}
if (selection == Selection.Cycle) if (selection == Selection.Cycle)
{ {
float TimeEstimateTotal; /// Time estimate of the selected cycle or test float TimeEstimateTotal; /// Time estimate of the selected cycle or test
@@ -703,6 +657,7 @@ namespace TBF.BenchControl.Sequences
Program.LocalSettings.BatchNr++; Program.LocalSettings.BatchNr++;
Program.LocalSettings.Save(); Program.LocalSettings.Save();
log.FatalFormat("BatchNr = {0} (incremented)", Program.LocalSettings.BatchNr);
if (simultWithEvacuationCount > 0) if (simultWithEvacuationCount > 0)
@@ -1145,5 +1100,79 @@ namespace TBF.BenchControl.Sequences
.EnterState(); .EnterState();
while (true) StateMachine.WaitRunDevsRunOps(); while (true) StateMachine.WaitRunDevsRunOps();
} }
}
void CollectSimultSteps()
{
///
/// Collect steps (e.g. iPerl communication) to be done simultaneously with purging
///
simultWithPurgingCount = 0;
simultWithPurgingCfg = null;
simultWithPurgingTests.Clear();
simultWithPurgingParams.Clear();
///
foreach (var test in StateMachine.Tests)
{
Generic.IComponent testMethodComp = TbfComponents.FindComponent(test.Method);
if (testMethodComp == null) break;
testMethodComp.Cfg.UpdateTestParams(test);
ISimultTestMethod simultTest = testMethodComp as ISimultTestMethod;
MetersPath sensPath = StateMachine.GetMetersPath(test);
if (simultTest == null || !simultTest.SimultWithPrevious || sensPath == null) break;
if (simultWithPurgingCount == 0)
{
simultWithPurgingCfg = simultTest.Cfg;
}
else if (simultTest.Cfg != simultWithPurgingCfg)
{
break;
}
simultWithPurgingTests.Add(test);
simultWithPurgingParams.Add(testMethodComp.Cfg.GetTestParams().Clone() as Generic.ITestParams);
simultWithPurgingCount++;
}
///
/// Collect steps (e.g. iPerl communication) to be done simultaneously with evacuation
///
simultWithEvacuationCount = 0;
simultWithEvacuationCfg = null;
simultWithEvacuationTests.Clear();
simultWithEvacuationParams.Clear();
///
for (int i = StateMachine.Tests.Count - 1; i >= simultWithPurgingCount; i--)
{
var test = StateMachine.Tests[i];
Generic.IComponent testMethodComp = TbfComponents.FindComponent(test.Method);
if (testMethodComp == null) break;
testMethodComp.Cfg.UpdateTestParams(test);
ISimultTestMethod simultTest = testMethodComp as ISimultTestMethod;
MetersPath sensPath = StateMachine.GetMetersPath(test);
if (simultTest == null || !simultTest.SimultWithNext || sensPath == null) break;
if (simultWithEvacuationCount == 0)
{
simultWithEvacuationCfg = simultTest.Cfg;
}
else if (simultTest.Cfg != simultWithEvacuationCfg)
{
break;
}
simultWithEvacuationTests.Insert(0, test);
simultWithEvacuationParams.Insert(0, testMethodComp.Cfg.GetTestParams().Clone() as Generic.ITestParams);
simultWithEvacuationCount++;
}
}
}
} }
+23 -4
View File
@@ -116,19 +116,26 @@ namespace TBF
Program.LocalSettings = LocalSettings.Load(Program.LocalSettingsBackupName); Program.LocalSettings = LocalSettings.Load(Program.LocalSettingsBackupName);
if (Program.LocalSettings == null || Program.LocalSettings.TestBenches == null) if (Program.LocalSettings == null || Program.LocalSettings.TestBenches == null)
{ {
log.FatalFormat("Local settings: Could not load file {0}, nor {1}.", Program.LocalSettingsFileName, Program.LocalSettingsBackupName);
log.Fatal("Application terminated.");
return; /// Fatal error return; /// Fatal error
} }
else else
{ {
LocalSettings.Save(); /// Save the settings to overwrite the wrong file LocalSettings.Save(); /// Save the settings to overwrite the wrong file
log.FatalFormat("Local settings: Could not load file {0}, successfully loaded {1}", Program.LocalSettingsFileName, Program.LocalSettingsBackupName);
log.FatalFormat("BatchNr = {0}", LocalSettings.BatchNr);
} }
} }
else else
{ {
/// Loading local seetings from the regular config file was successful. Update the backup /// Loading local seetings from the regular config file was successful. Update the backup
File.Copy(Program.LocalSettingsFileName, Program.LocalSettingsBackupName, true); File.Copy(Program.LocalSettingsFileName, Program.LocalSettingsBackupName, true);
log.FatalFormat("Local settings: Successfully loaded from {0}", Program.LocalSettingsFileName);
log.FatalFormat("BatchNr = {0}", LocalSettings.BatchNr);
} }
try try
{ {
string culture = LocalSettings.Language.Replace('_', '-'); string culture = LocalSettings.Language.Replace('_', '-');
@@ -145,11 +152,13 @@ namespace TBF
//AltCulture = null; //AltCulture = null;
AltCulture = new System.Globalization.CultureInfo("SK"); AltCulture = new System.Globalization.CultureInfo("SK");
/// This belongs to Application.Run(new MainWnd()) ... /// This belongs to Application.Run(new MainWnd()) ...
/// and should be executed before opening 'loginDlg' /// and should be executed before opening 'loginDlg'
Application.EnableVisualStyles(); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); Application.SetCompatibleTextRenderingDefault(false);
/// Ensure that there is at least one bench in the configuration /// Ensure that there is at least one bench in the configuration
while (Program.LocalSettings.BenchesCount == 0) while (Program.LocalSettings.BenchesCount == 0)
{ {
@@ -170,7 +179,8 @@ namespace TBF
/// User login /// User login
bool retryLogin = true; /// true = stay in a login loop bool retryLogin = true; /// true = stay in a login loop
do { do
{
LoginDlgWithBenchSelection loginDlgBench; LoginDlgWithBenchSelection loginDlgBench;
if (LocalSettings.LastBenchName != null) if (LocalSettings.LastBenchName != null)
{ {
@@ -188,11 +198,12 @@ namespace TBF
} }
else else
{ {
for (int i = 0; i < LocalSettings.BenchesCount; i++) for (int i = 0; i < LocalSettings.BenchesCount; i++)
{ {
if (LocalSettings.TestBenches[i].BenchName == loginDlgBench.BenchName) if (LocalSettings.TestBenches[i].BenchName == loginDlgBench.BenchName)
{ {
log.FatalFormat("Test bench name: {0}", loginDlgBench.BenchName);
User loadedUser = null; User loadedUser = null;
try try
{ {
@@ -200,7 +211,7 @@ namespace TBF
if (User.IsPowerUser(loginDlgBench.User, loginDlgBench.Password)) if (User.IsPowerUser(loginDlgBench.User, loginDlgBench.Password))
{ {
loadedUser = new User(loginDlgBench.User); loadedUser = new User(loginDlgBench.User, 6);
authorized = loadedUser.Authorize(loginDlgBench.User, loginDlgBench.Password); authorized = loadedUser.Authorize(loginDlgBench.User, loginDlgBench.Password);
} }
@@ -231,6 +242,14 @@ namespace TBF
Results.DB.DbType = Config.Data.CurrentBench.WaterMetersDBSettings.DbType; Results.DB.DbType = Config.Data.CurrentBench.WaterMetersDBSettings.DbType;
Results.DB.ConnectionString = Config.Data.CurrentBench.WaterMetersDBSettings.ConnectionString; Results.DB.ConnectionString = Config.Data.CurrentBench.WaterMetersDBSettings.ConnectionString;
Results.DB.LoadSharedData(); Results.DB.LoadSharedData();
int maxBatchNr = Results.DB.GetMaxSavedBatchNr();
if (Program.LocalSettings.BatchNr <= maxBatchNr)
{
log.FatalFormat("Max. BatchNr in DB = {0}, LocalSettings.BatchNr = {1}", maxBatchNr, Program.LocalSettings.BatchNr);
Program.LocalSettings.BatchNr = maxBatchNr + 1;
Program.LocalSettings.Save();
log.FatalFormat("LocalSettings.BatchNr updated to {0}", Program.LocalSettings.BatchNr);
}
retryLogin = false; retryLogin = false;
break; break;
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number // Build Number
// Revision // Revision
// //
[assembly: AssemblyVersion("2.5.257.1")] [assembly: AssemblyVersion("2.5.258.1")]
[assembly: AssemblyFileVersion("2.5.257.1")] [assembly: AssemblyFileVersion("2.5.258.1")]