This commit is contained in:
@@ -36,7 +36,39 @@ TODO: Get teh amount of space a HUGE seeded database consumes
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
TODO: SUBSCRIPTION CHANGES
|
TODO: SUBSCRIPTION CHANGES DATA VOLUME
|
||||||
|
ACTUALLY, it's not super easy to get file space used surprisingly, and also it's time consuming and disk io intensive as it has to enumerate every file
|
||||||
|
and subdirectory one at a time, a better option is to find a way to create a fixed volume in linux dedicated to ayanova, put all the data in it
|
||||||
|
and use that and if they pay for more then can use a volume in a storage location.
|
||||||
|
|
||||||
|
Also that means AyaNova is not having to make sure they don't crash AyaNova by using up too much space, instead, the volume is fixed and it becomes a matter of
|
||||||
|
checking for free space only, not counting files
|
||||||
|
|
||||||
|
|
||||||
|
TODO: DOCUMENT A NEW droplet has about 21gb of free space. We could say 20 and 1 bonus but meh, 21 sounds better.
|
||||||
|
So this needs to be turned into a volume dedicated to data usage and maybe leave the 1gb on the /dev/vda1 and put the 20gb on the new volume purely for data storage
|
||||||
|
actually 21gb this is a generic setup with no data generated yet:
|
||||||
|
Filesystem Size Used Avail Use% Mounted on
|
||||||
|
tmpfs 98M 1.1M 97M 2% /run
|
||||||
|
/dev/vda1 25G 4.0G 21G 17% /
|
||||||
|
tmpfs 486M 28K 486M 1% /dev/shm
|
||||||
|
tmpfs 5.0M 0 5.0M 0% /run/lock
|
||||||
|
/dev/vda15 105M 5.3M 100M 5% /boot/efi
|
||||||
|
tmpfs 98M 4.0K 98M 1% /run/user/0
|
||||||
|
|
||||||
|
|
||||||
|
Filesystem 1K-blocks Used Available Use% Mounted on
|
||||||
|
tmpfs 99444 1116 98328 2% /run
|
||||||
|
/dev/vda1 25215872 4131840 21067648 17% /
|
||||||
|
tmpfs 497220 28 497192 1% /dev/shm
|
||||||
|
tmpfs 5120 0 5120 0% /run/lock
|
||||||
|
/dev/vda15 106858 5329 101529 5% /boot/efi
|
||||||
|
tmpfs 99444 4 99440 1% /run/user/0
|
||||||
|
TEST: cheapest storage for attachments possible, test out creating a new droplet with block storage to hold the attachment files to see if it's possible, how it's done and mapped etc
|
||||||
|
|
||||||
|
|
||||||
|
probably not a good idea down here -----v
|
||||||
|
|
||||||
private const string MAXIMUM_DATA_GB_FEATURE_NAME = "MaximumDataGB";
|
private const string MAXIMUM_DATA_GB_FEATURE_NAME = "MaximumDataGB";
|
||||||
If license doesn't have it and it's subscrkiption then the default is 20gb
|
If license doesn't have it and it's subscrkiption then the default is 20gb
|
||||||
ATTACHMENT / DATA CAP have a maximum attachment / data cap size that can be configured for subscriptions
|
ATTACHMENT / DATA CAP have a maximum attachment / data cap size that can be configured for subscriptions
|
||||||
@@ -151,26 +183,6 @@ todo: move howto's from digitalocean folder to documentation for rockfish so it
|
|||||||
|
|
||||||
todo: what are "reserved ip's" referenced on create droplet page? Sounds like a possible solution to the endless new certs issue maybe?
|
todo: what are "reserved ip's" referenced on create droplet page? Sounds like a possible solution to the endless new certs issue maybe?
|
||||||
|
|
||||||
TODO: DOCUMENT A NEW droplet has about 21gb of free space. We could say 20 and 1 bonus but meh, 21 sounds better.
|
|
||||||
So this needs to be turned into a volume dedicated to data usage and maybe leave the 1gb on the /dev/vda1 and put the 20gb on the new volume purely for data storage
|
|
||||||
actually 21gb this is a generic setup with no data generated yet:
|
|
||||||
Filesystem Size Used Avail Use% Mounted on
|
|
||||||
tmpfs 98M 1.1M 97M 2% /run
|
|
||||||
/dev/vda1 25G 4.0G 21G 17% /
|
|
||||||
tmpfs 486M 28K 486M 1% /dev/shm
|
|
||||||
tmpfs 5.0M 0 5.0M 0% /run/lock
|
|
||||||
/dev/vda15 105M 5.3M 100M 5% /boot/efi
|
|
||||||
tmpfs 98M 4.0K 98M 1% /run/user/0
|
|
||||||
|
|
||||||
|
|
||||||
Filesystem 1K-blocks Used Available Use% Mounted on
|
|
||||||
tmpfs 99444 1116 98328 2% /run
|
|
||||||
/dev/vda1 25215872 4131840 21067648 17% /
|
|
||||||
tmpfs 497220 28 497192 1% /dev/shm
|
|
||||||
tmpfs 5120 0 5120 0% /run/lock
|
|
||||||
/dev/vda15 106858 5329 101529 5% /boot/efi
|
|
||||||
tmpfs 99444 4 99440 1% /run/user/0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -199,44 +211,14 @@ todo: Uptime monitoring for customers servers, going to need something, can't be
|
|||||||
https://www.digitalocean.com/products/uptime-monitoring
|
https://www.digitalocean.com/products/uptime-monitoring
|
||||||
https://docs.digitalocean.com/reference/api/api-reference/#operation/monitoring_get_dropletFilesystemFreeMetrics
|
https://docs.digitalocean.com/reference/api/api-reference/#operation/monitoring_get_dropletFilesystemFreeMetrics
|
||||||
|
|
||||||
todo: update the test servers whichever are around, I've done my dev test.helloayanova.com, but should also do a261 and the eval ones
|
|
||||||
|
|
||||||
todo: research stuff below, then website stuff and move on
|
todo: research stuff below, then website stuff and move on
|
||||||
|
|
||||||
REVISIT PRICING:
|
|
||||||
This is interesting
|
|
||||||
The HaveAByte AyaNova hosting rate is $15 per month per scheduleable user, with a minimum of $100/month. It doesn’t matter which version you’re on, which options you have, or add-ons you have purchased, which parts you use, or don’t use. There is also a one-time setup fee of $299. That’s it!
|
|
||||||
|
|
||||||
I'm thinking of reducing the price, 50 seems way too high for most people, perhaps we too can do a minimum per month and lower the per user costs? Maybe more around the 25-30 dollar range??
|
|
||||||
|
|
||||||
L8ER >>>>>>>>>>>>>>>>>>>>
|
L8ER >>>>>>>>>>>>>>>>>>>>
|
||||||
|
|
||||||
todo: jmeter load testing surfaced this in the log:
|
|
||||||
it's actually part of one of the tests, not sure if I should axe it or keep it, but it does tend to fill the log
|
|
||||||
Non existant translation keys requested: PMTemplate,PartInventoryList,NotificationSettings,FilterUnsaved,WorkOrderTemplate
|
|
||||||
|
|
||||||
todo: Howto doc in digitalocean work folder sb moved into rockfish docs as central location / cheat sheet when on the road
|
|
||||||
|
|
||||||
RESEARCH: EMAIL server replacement
|
|
||||||
sendgrid / email system can we have a domain just for our notifications for those that don't use their own domain and use for all users (but NOT tied to AyaNova.com)
|
|
||||||
https://linuxhandbook.com/set-up-discourse-digital-ocean/ has an example of discourse with Mailgun freen email ssytem and a domain
|
|
||||||
(NOT MAILCHIMP AFTER HACK that affected digitalocean they sound like dicks)
|
|
||||||
NOTE: this is important for our business as well as we want to stop using our own mail server and we want ensured delivery of business emails which we do not have right now to all microsoft mail customers which is huge
|
|
||||||
RESEARCH:
|
|
||||||
Sendgrid is for sending out notifiations stuff like that, not a full on email provider, just a deliverer
|
|
||||||
|
|
||||||
Fastmail looks like a good option because only need to pay for one account and can have up to 500 aliases so basically pay for support@ayannova.com but can receive on sales@ayanova.com etc and when sending will look like comes
|
|
||||||
Also they only do email, they don't use email for marketing or data gathering, there are real people to talk to if an issue wherease google is almost impossiible, they are cheaper than google etc
|
|
||||||
from sales@ayanova.com so in essence it's all that is needed.
|
|
||||||
There are issues though with keeping mail on their server, Ideally I would copy all to local on thunderbird and backup local folder here which makes sense.
|
|
||||||
TODO: figure out how to copy all email to local folders and any new mail coming in or sent out to local folders automatically so that if the mail provider gets toasted nothing is lost
|
|
||||||
https://support.mozilla.org/en-US/questions/1079742
|
|
||||||
TODO: backup email locally in some automated way as localfolders now contains all the cardjohn email in that one place and in future will have all the old biz email too
|
|
||||||
I'm seeing I used to have all my profile in c:\data\thunderbird but now it's in some other folder so move it back to data and add it to the regular backup rotation
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TEST: cheapest storage for attachments possible, test out creating a new droplet with block storage to hold the attachment files to see if it's possible, how it's done and mapped etc
|
|
||||||
|
|
||||||
todo: shareit once we know the optional add-on's people can buy for subscription need prodcut pages with shareit to actually sell that shit
|
todo: shareit once we know the optional add-on's people can buy for subscription need prodcut pages with shareit to actually sell that shit
|
||||||
and also options in rockfish so it displays in the license, in fact rockfish should allow quantities with the options but currently doesn't which is just wrong
|
and also options in rockfish so it displays in the license, in fact rockfish should allow quantities with the options but currently doesn't which is just wrong
|
||||||
|
|||||||
@@ -259,8 +259,13 @@ namespace AyaNova
|
|||||||
logger.Info(".Net Version - {0}", Environment.Version.ToString());
|
logger.Info(".Net Version - {0}", Environment.Version.ToString());
|
||||||
logger.Debug("CPU count - {0}", Environment.ProcessorCount);
|
logger.Debug("CPU count - {0}", Environment.ProcessorCount);
|
||||||
logger.Debug("RAM - {0}", FileUtil.GetBytesReadable(GC.GetGCMemoryInfo().TotalAvailableMemoryBytes));
|
logger.Debug("RAM - {0}", FileUtil.GetBytesReadable(GC.GetGCMemoryInfo().TotalAvailableMemoryBytes));
|
||||||
|
#if (SUBSCRIPTION_BUILD)
|
||||||
|
logger.Debug("Available data storage - {0}", FileUtil.GetBytesReadable(AttachmentFilesAvailableSpace));
|
||||||
|
#else
|
||||||
logger.Debug("Backup file space - {0}", FileUtil.GetBytesReadable(UtilityFilesAvailableSpace));
|
logger.Debug("Backup file space - {0}", FileUtil.GetBytesReadable(UtilityFilesAvailableSpace));
|
||||||
logger.Debug("Attachments file space - {0}", FileUtil.GetBytesReadable(AttachmentFilesAvailableSpace));
|
logger.Debug("Attachments file space - {0}", FileUtil.GetBytesReadable(AttachmentFilesAvailableSpace));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("Boot path", startFolder);
|
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("Boot path", startFolder);
|
||||||
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("OS", Environment.OSVersion.ToString());
|
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("OS", Environment.OSVersion.ToString());
|
||||||
@@ -274,8 +279,12 @@ namespace AyaNova
|
|||||||
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("OS Locale", System.Globalization.CultureInfo.CurrentCulture.EnglishName);
|
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("OS Locale", System.Globalization.CultureInfo.CurrentCulture.EnglishName);
|
||||||
|
|
||||||
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("RAM", FileUtil.GetBytesReadable(GC.GetGCMemoryInfo().TotalAvailableMemoryBytes));
|
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("RAM", FileUtil.GetBytesReadable(GC.GetGCMemoryInfo().TotalAvailableMemoryBytes));
|
||||||
|
#if (SUBSCRIPTION_BUILD)
|
||||||
|
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("Available data storage", FileUtil.GetBytesReadable(AttachmentFilesAvailableSpace));
|
||||||
|
#else
|
||||||
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("Backup space", FileUtil.GetBytesReadable(UtilityFilesAvailableSpace));
|
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("Backup space", FileUtil.GetBytesReadable(UtilityFilesAvailableSpace));
|
||||||
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("Attachments space", FileUtil.GetBytesReadable(AttachmentFilesAvailableSpace));
|
ServerBootConfig.BOOT_DIAGNOSTIC_INFO.Add("Attachments space", FileUtil.GetBytesReadable(AttachmentFilesAvailableSpace));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -68,10 +68,6 @@ namespace AyaNova.Core
|
|||||||
//ActiveCustomerUsers subscription license
|
//ActiveCustomerUsers subscription license
|
||||||
private const string ACTIVE_CUSTOMER_USERS_FEATURE_NAME = "ActiveCustomerUsers";
|
private const string ACTIVE_CUSTOMER_USERS_FEATURE_NAME = "ActiveCustomerUsers";
|
||||||
|
|
||||||
//Subscription maximum data folder size (includes db and all files created by AyaNova or attached etc)
|
|
||||||
private const string MAXIMUM_DATA_GB_FEATURE_NAME = "MaximumDataGB";
|
|
||||||
private const int DEFAULT_MAXIMUM_DATA_GB = 20;
|
|
||||||
|
|
||||||
//This feature name means it's a trial key
|
//This feature name means it's a trial key
|
||||||
private const string TRIAL_FEATURE_NAME = "TrialMode";
|
private const string TRIAL_FEATURE_NAME = "TrialMode";
|
||||||
|
|
||||||
@@ -164,14 +160,6 @@ namespace AyaNova.Core
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public long MaxiumDataGB
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return GetLicenseFeature(MAXIMUM_DATA_GB_FEATURE_NAME)?.Count ?? DEFAULT_MAXIMUM_DATA_GB;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Check for the existance of license feature
|
/// Check for the existance of license feature
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -430,7 +418,7 @@ namespace AyaNova.Core
|
|||||||
#else
|
#else
|
||||||
build = "Perpetual",
|
build = "Perpetual",
|
||||||
#endif
|
#endif
|
||||||
// activeTechUserCount = AyaNova.Biz.UserBiz.ActiveTechUserCountAsync().Result,
|
// activeTechUserCount = AyaNova.Biz.UserBiz.ActiveTechUserCountAsync().Result,
|
||||||
activeCustomerContactUserCount = AyaNova.Biz.UserBiz.ActiveCustomerContactUserCountAsync().Result,
|
activeCustomerContactUserCount = AyaNova.Biz.UserBiz.ActiveCustomerContactUserCountAsync().Result,
|
||||||
activeInternalUserCount = AyaNova.Biz.UserBiz.ActiveInternalUserCountAsync().Result
|
activeInternalUserCount = AyaNova.Biz.UserBiz.ActiveInternalUserCountAsync().Result
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user