This commit is contained in:
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
@@ -49,8 +49,8 @@
|
|||||||
"AYANOVA_USE_URLS": "http://*:7575;",
|
"AYANOVA_USE_URLS": "http://*:7575;",
|
||||||
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
|
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
|
||||||
"AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles",
|
"AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles",
|
||||||
"AYANOVA_SERVER_TEST_MODE":"false",
|
"AYANOVA_SERVER_TEST_MODE":"true",
|
||||||
"AYANOVA_SERVER_TEST_MODE_SEEDLEVEL":"small",
|
"AYANOVA_SERVER_TEST_MODE_SEEDLEVEL":"huge",
|
||||||
"AYANOVA_SERVER_TEST_MODE_TZ_OFFSET":"-7",
|
"AYANOVA_SERVER_TEST_MODE_TZ_OFFSET":"-7",
|
||||||
"AYANOVA_BACKUP_PG_DUMP_PATH":"C:\\data\\code\\PostgreSQLPortable_12.0\\App\\PgSQL\\bin\\"
|
"AYANOVA_BACKUP_PG_DUMP_PATH":"C:\\data\\code\\PostgreSQLPortable_12.0\\App\\PgSQL\\bin\\"
|
||||||
|
|
||||||
|
|||||||
@@ -247,7 +247,7 @@ namespace AyaNova.Api.Controllers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//trim out tables we don't want here
|
//trim out tables less than 1mb (the math above sets anything less than 1mb to zero)
|
||||||
TopTables = TopTables.Where(z => z.value > 0).OrderByDescending(z => z.value).ToList();
|
TopTables = TopTables.Where(z => z.value > 0).OrderByDescending(z => z.value).ToList();
|
||||||
|
|
||||||
long DBTotalSize = 0;
|
long DBTotalSize = 0;
|
||||||
|
|||||||
@@ -256,9 +256,10 @@ namespace AyaNova.Util
|
|||||||
|
|
||||||
|
|
||||||
//SEARCH TABLES
|
//SEARCH TABLES
|
||||||
await ExecQueryAsync("CREATE TABLE asearchdictionary (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, word varchar(255) not null)");
|
await ExecQueryAsync("CREATE TABLE asearchdictionary (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, word varchar(255) not null unique)");
|
||||||
//Must be unique and also this is hit a *lot* during searches and also indexing
|
//Must be unique and also this is hit a *lot* during searches and also indexing
|
||||||
await ExecQueryAsync("CREATE UNIQUE INDEX asearchdictionary_word_idx ON asearchdictionary (word);");
|
//On actual testing this index is never used so for now removing it, perhaps it is a case of bad data but I tested with Huge dataset
|
||||||
|
//await ExecQueryAsync("CREATE UNIQUE INDEX asearchdictionary_word_idx ON asearchdictionary (word);");
|
||||||
|
|
||||||
//search key
|
//search key
|
||||||
await ExecQueryAsync("CREATE TABLE asearchkey (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, wordid bigint not null REFERENCES asearchdictionary (id), objectid bigint not null, objecttype integer not null)");
|
await ExecQueryAsync("CREATE TABLE asearchkey (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, wordid bigint not null REFERENCES asearchdictionary (id), objectid bigint not null, objecttype integer not null)");
|
||||||
@@ -269,8 +270,10 @@ namespace AyaNova.Util
|
|||||||
//await ExecQueryAsync("CREATE INDEX asearchkey_typeid_idx ON asearchkey (objectid, objecttype );");
|
//await ExecQueryAsync("CREATE INDEX asearchkey_typeid_idx ON asearchkey (objectid, objecttype );");
|
||||||
|
|
||||||
//This is what is needed during Searching
|
//This is what is needed during Searching
|
||||||
//search does a lot of hits on searchkey looking for the wordid and optionally objecttype
|
//search does a lot of hits on searchkey looking for the wordid and optionally objecttype
|
||||||
await ExecQueryAsync("CREATE INDEX asearchkey_wordid_otype_idx ON asearchkey (wordid, objecttype);");
|
//In testing this did not pan out, in fact it was much faster to search both with and without a objecttype specified to simply have an index on wordid
|
||||||
|
// await ExecQueryAsync("CREATE INDEX asearchkey_wordid_otype_idx ON asearchkey (wordid, objecttype);");
|
||||||
|
await ExecQueryAsync("CREATE INDEX asearchkey_wordid_idx ON asearchkey (wordid);");
|
||||||
|
|
||||||
//Search indexing stored procedure
|
//Search indexing stored procedure
|
||||||
await ExecQueryAsync(@"
|
await ExecQueryAsync(@"
|
||||||
|
|||||||
@@ -607,64 +607,7 @@ namespace AyaNova.Util
|
|||||||
u.UserOptions.CurrencyName = "USD";
|
u.UserOptions.CurrencyName = "USD";
|
||||||
u.UserOptions.UiColor = Fake.Internet.Color();
|
u.UserOptions.UiColor = Fake.Internet.Color();
|
||||||
|
|
||||||
|
u.Wiki = @"
|
||||||
|
|
||||||
//this seems wrong but is actually faster!?
|
|
||||||
UserBiz Biz = UserBiz.GetBiz(ServiceProviderProvider.DBContext);
|
|
||||||
//allow creation of not entirely ready users (missing client id or subcontractor vendor id etc)
|
|
||||||
Biz.SeedOrImportRelaxedRulesMode = true;
|
|
||||||
|
|
||||||
|
|
||||||
var NewObject = await Biz.CreateAsync(u);
|
|
||||||
if (NewObject == null)
|
|
||||||
{
|
|
||||||
log.LogError($"Seeder::GenSeedUser error creating user {u.Name}\r\n" + Biz.GetErrorsAsString());
|
|
||||||
throw new System.Exception("Seeder::GenSeedUser error creating user\r\n" + Biz.GetErrorsAsString());
|
|
||||||
}
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
SeededUserCount += count;
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////
|
|
||||||
//Seed widget for testing
|
|
||||||
//
|
|
||||||
public static async Task GenSeedWidgetAsync(ILogger log, int count)
|
|
||||||
{
|
|
||||||
//this is 4 times slower than doing it inside the loop below
|
|
||||||
//seems counterintuitive but maybe it's to do with the db context not being refreshed?
|
|
||||||
// WidgetBiz biz = WidgetBiz.GetBiz(ServiceProviderProvider.DBContext);
|
|
||||||
|
|
||||||
var f = new Bogus.Faker();
|
|
||||||
|
|
||||||
|
|
||||||
//RANDOM ROLES
|
|
||||||
Array values = Enum.GetValues(typeof(UserType));
|
|
||||||
Random random = new Random();
|
|
||||||
|
|
||||||
DateTime seedStartWindow = DateTime.Now.AddYears(-1);
|
|
||||||
DateTime seedEndWindow = DateTime.Now.AddYears(1);
|
|
||||||
for (int x = 0; x < count; x++)
|
|
||||||
{
|
|
||||||
Widget o = new Widget();
|
|
||||||
o.Name = Uniquify(f.Commerce.ProductName());
|
|
||||||
o.Active = true;
|
|
||||||
// o.StartDate = f.Date.Between(DateTime.Now, DateTime.Now.AddMinutes(60)).ToUniversalTime();
|
|
||||||
// o.EndDate = f.Date.Between(DateTime.Now.AddMinutes(90), DateTime.Now.AddHours(5)).ToUniversalTime();
|
|
||||||
|
|
||||||
// o.StartDate = DateTime.Now.ToUniversalTime();
|
|
||||||
// o.EndDate = DateTime.Now.AddMinutes(60).ToUniversalTime();
|
|
||||||
DateTime dtSeed = f.Date.Between(seedStartWindow, seedEndWindow).ToUniversalTime();
|
|
||||||
o.StartDate = dtSeed;
|
|
||||||
o.EndDate = dtSeed.AddMinutes(60).ToUniversalTime();
|
|
||||||
o.DollarAmount = Convert.ToDecimal(f.Commerce.Price());
|
|
||||||
//Random but valid enum
|
|
||||||
UserType randomUserType = (UserType)values.GetValue(random.Next(values.Length));
|
|
||||||
o.UserType = randomUserType;
|
|
||||||
|
|
||||||
o.Notes = f.Lorem.Sentence();
|
|
||||||
o.Wiki = @"
|
|
||||||
|
|
||||||
# Markdown quick reference for Wiki pages
|
# Markdown quick reference for Wiki pages
|
||||||
***
|
***
|
||||||
@@ -787,6 +730,63 @@ A more detailed markdown guide is available here:
|
|||||||
|
|
||||||
***
|
***
|
||||||
";
|
";
|
||||||
|
|
||||||
|
//this seems wrong but is actually faster!?
|
||||||
|
UserBiz Biz = UserBiz.GetBiz(ServiceProviderProvider.DBContext);
|
||||||
|
//allow creation of not entirely ready users (missing client id or subcontractor vendor id etc)
|
||||||
|
Biz.SeedOrImportRelaxedRulesMode = true;
|
||||||
|
|
||||||
|
|
||||||
|
var NewObject = await Biz.CreateAsync(u);
|
||||||
|
if (NewObject == null)
|
||||||
|
{
|
||||||
|
log.LogError($"Seeder::GenSeedUser error creating user {u.Name}\r\n" + Biz.GetErrorsAsString());
|
||||||
|
throw new System.Exception("Seeder::GenSeedUser error creating user\r\n" + Biz.GetErrorsAsString());
|
||||||
|
}
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
SeededUserCount += count;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////
|
||||||
|
//Seed widget for testing
|
||||||
|
//
|
||||||
|
public static async Task GenSeedWidgetAsync(ILogger log, int count)
|
||||||
|
{
|
||||||
|
//this is 4 times slower than doing it inside the loop below
|
||||||
|
//seems counterintuitive but maybe it's to do with the db context not being refreshed?
|
||||||
|
// WidgetBiz biz = WidgetBiz.GetBiz(ServiceProviderProvider.DBContext);
|
||||||
|
|
||||||
|
var f = new Bogus.Faker();
|
||||||
|
|
||||||
|
|
||||||
|
//RANDOM ROLES
|
||||||
|
Array values = Enum.GetValues(typeof(UserType));
|
||||||
|
Random random = new Random();
|
||||||
|
|
||||||
|
DateTime seedStartWindow = DateTime.Now.AddYears(-1);
|
||||||
|
DateTime seedEndWindow = DateTime.Now.AddYears(1);
|
||||||
|
for (int x = 0; x < count; x++)
|
||||||
|
{
|
||||||
|
Widget o = new Widget();
|
||||||
|
o.Name = Uniquify(f.Commerce.ProductName());
|
||||||
|
o.Active = true;
|
||||||
|
// o.StartDate = f.Date.Between(DateTime.Now, DateTime.Now.AddMinutes(60)).ToUniversalTime();
|
||||||
|
// o.EndDate = f.Date.Between(DateTime.Now.AddMinutes(90), DateTime.Now.AddHours(5)).ToUniversalTime();
|
||||||
|
|
||||||
|
// o.StartDate = DateTime.Now.ToUniversalTime();
|
||||||
|
// o.EndDate = DateTime.Now.AddMinutes(60).ToUniversalTime();
|
||||||
|
DateTime dtSeed = f.Date.Between(seedStartWindow, seedEndWindow).ToUniversalTime();
|
||||||
|
o.StartDate = dtSeed;
|
||||||
|
o.EndDate = dtSeed.AddMinutes(60).ToUniversalTime();
|
||||||
|
o.DollarAmount = Convert.ToDecimal(f.Commerce.Price());
|
||||||
|
//Random but valid enum
|
||||||
|
UserType randomUserType = (UserType)values.GetValue(random.Next(values.Length));
|
||||||
|
o.UserType = randomUserType;
|
||||||
|
|
||||||
|
o.Notes = f.Lorem.Sentence();
|
||||||
|
|
||||||
o.Tags = RandomTags(f);
|
o.Tags = RandomTags(f);
|
||||||
|
|
||||||
o.UserId = f.Random.Int(1, SeededUserCount);
|
o.UserId = f.Random.Int(1, SeededUserCount);
|
||||||
|
|||||||
Reference in New Issue
Block a user