Activities of "Sturla"

@alper

First of all there is a difference in 0 or 1 results when going to docs from commercial or open docks. I misspelled tired and got this result https://docs.abp.io/en/abp/latest and https://docs.abp.io/en/commercial/latest/

Then if I search for tiered I get this with the commercial one showing me 1 item but 45 "entries" (shouldn´t that be pages?)

you should look into OpenAI if you havent already https://openai.com/blog/introducing-chatgpt-and-whisper-apis

Email event module

I´m constantly sending emails under different scenarios like

  • "Welcome" email to new tenant/user signing up
  • "Item bought" email to user
  • "Issue in external service" email to host admin

I would like a view that handles all these emails for the system in an easy to do manner.

Here is some psudo code. These events would inherit from EmailAutoDescoveryEvent that would be auto registered and viewable in the module UI.

public class BoughtEvent: EmailAutoDescoveryEvent
{
    public int UserId {get;set;}
    // etc.
}

That could be used like this in code

public async Task PurchachedFinalizedAsync()
{
    // other logic ommitted
    
    await emailSystem.SendEmail(new BoughtEvent(current.UserId));  
}

or with attribute

[SendEmail(typeof(BoughtEvent))]
public async Task PurchachedFinalizedAsync()
{
    // logic ommitted
}

Other functionality

  • Option to send to current tenant or user using the code
  • Possible to create groups that can be sent to
  • Edit templates in UI?
  • Have more than 1 template for each event? You might want to send host more information than the tennant that was signing up?

User Support form module (not forum)

Currently my public project has a "Contact us" form where a user leaves an email and and tells us what is wrong. To solve their issue we go looking for logs and information about what is possibly bothering them, something that is hard and time consuming in the UI. We usually endup just using custom SQL scripts directly to the database.

So I´m suggesting that we get new User support module in abp.io?

Flow would be something like

  • Support form is accessable on the public website. It has name/email/subject/body inputs.
  • User fills in the form. He is either logged in or leaves an email (cant submit if the email doesn´t match)
  • This support ticket is stored
  • We can view the users details and can act on it just like we do in the users overview in the Admin/Identity Managment/Users grid.
  • Somebody with "support role" or greater can take these issues.
  • Easy to view all audit logs for the user
  • We can reply to the users from that view
  • We can mark the supports as in progress or done

This would be an awesome addition and would give a "365 degree" user/issues management..

Here are my suggestions to enhance the Audit Logs UI

Possible Enhancements

  • All "40x" and "50x" error selections andmulti-select
  • "Last x" (30 min, 1 hour, 6 hours, 12 hours, 1 day, 3 days, 7 days, 30 days) like Azure Application Insights has for easier and quicker viewing of logs
  • Before and after error
  • Graph view of actions
  • Email alert subscription
  • User browser information
  • "Users with issues" filter
  • Change "Application Name" to a dropdown with awailable names

All "40x" and "50x" error selections

This list is to granular. Its easy to miss something.I would like to be able to select all 400 or 500 errors instead of having to go through all of them one by one.

Show data for last x time

I constantly need to view the logs and it becomes really tired fast having to set these two date imputs!

What was going on before/after?

I would really like to be able to dig into the logs with a dropdown that gives me 10 items before and 10 after so I can quickly see if an error is related to something else going on

Graph view of actions

Its hard to get a picture of what is going on with just the logs. They are now only used as reactive since you only go there if something is reported wrong. It would be great to have somekind of grid overview for the logs.

Email alert subscription

I would like to be able to subscribe to errors (40x/50x) happening. Would also be great if it was possible to subscribe to only new errors (or new this week/month/ever).

User browser information

We are storing the browser types of the users, why not show some stats/info about it?

"Users with issues" filter

Would it be possible to pre filter on users that are having issues? It would need to be both tenants and none-tenants filter.

Change "Application Name" to a dropdown with awailable names

Now you need to write in the excact name of the application. It should be possible to populate this as a dropdown.

I beefed up the database to 5x and just ran the migration and all was fine! But thanks for the suggestion.

I´m going to create a multi tenant application and utilize the abp.io CMS part as much as possible.

My future tenants uses will want to have custom look and feel on their customer facing sites (each site will have custom DNS url) but I want to offer them few different starting options. The admin look and feel for a tenant can use LeptonX Theme no problem)

  1. How can I give them options of choosing between different starting UI´s.
  2. Can I pre-save the look and feel (menus, CSS etc) into CMS and somehow let the user choose from them before starting?

These here below are just some examples that could come from sites like https://wrapbootstrap.com/

https://wrapbootstrap.com/theme/exterior-architecture-interior-template-WB0639D28 (site https://exterior.websitelayout.net/)

another example https://wrapbootstrap.com/theme/shopapp-ecommerce-bootstrap-5-template-WB0X496C5 (site https://www.pxdraft.com/wrap/shopapp/html/home/index.html)

I´m updating my system (dev) to abp.io 8.0.2 where altering the AbpAuditLogs table causes the error here below.

It only had 155.174 rows.

The migration works if I delete everything from the table.

Question: How can I run this migration without timeout? I don´t want to delete all my auditlogs on production where I have 422.016 rows.

2024-03-10T16:27:33.2500677Z [16:27:33 INF] Migrating schema for host database...
2024-03-10T16:29:04.9441951Z [16:29:04 ERR] Failed executing DbCommand (30,021ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
2024-03-10T16:29:04.9442707Z DECLARE @var96 sysname;
2024-03-10T16:29:04.9443161Z SELECT @var96 = [d].[name]
2024-03-10T16:29:04.9443548Z FROM [sys].[default_constraints] [d]
2024-03-10T16:29:04.9444163Z INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id]
2024-03-10T16:29:04.9444655Z WHERE ([d].[parent_object_id] = OBJECT_ID(N'[AbpAuditLogs]') AND [c].[name] = N'ExtraProperties');
2024-03-10T16:29:04.9445171Z IF @var96 IS NOT NULL EXEC(N'ALTER TABLE [AbpAuditLogs] DROP CONSTRAINT [' + @var96 + '];');
2024-03-10T16:29:04.9445624Z UPDATE [AbpAuditLogs] SET [ExtraProperties] = N'' WHERE [ExtraProperties] IS NULL;
2024-03-10T16:29:04.9446098Z ALTER TABLE [AbpAuditLogs] ALTER COLUMN [ExtraProperties] nvarchar(max) NOT NULL;
2024-03-10T16:29:04.9446562Z ALTER TABLE [AbpAuditLogs] ADD DEFAULT N'' FOR [ExtraProperties];
2024-03-10T16:29:05.6208988Z Unhandled exception. Microsoft.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
2024-03-10T16:29:05.6209680Z  ---> System.ComponentModel.Win32Exception (258): The wait operation timed out.
2024-03-10T16:29:05.6210441Z    at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
2024-03-10T16:29:05.6211142Z    at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
2024-03-10T16:29:05.6213443Z    at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
2024-03-10T16:29:05.6213994Z    at Microsoft.Data.SqlClient.SqlCommand.InternalEndExecuteNonQuery(IAsyncResult asyncResult, Boolean isInternal, String endMethod)
2024-03-10T16:29:05.6214477Z    at Microsoft.Data.SqlClient.SqlCommand.EndExecuteNonQueryInternal(IAsyncResult asyncResult)
2024-03-10T16:29:05.6214897Z    at Microsoft.Data.SqlClient.SqlCommand.EndExecuteNonQueryAsync(IAsyncResult asyncResult)
2024-03-10T16:29:05.6215422Z    at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
2024-03-10T16:29:05.6215857Z --- End of stack trace from previous location ---
2024-03-10T16:29:05.6216332Z    at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
2024-03-10T16:29:05.6216910Z    at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
2024-03-10T16:29:05.6217508Z    at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQueryAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
2024-03-10T16:29:05.6218117Z    at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQueryAsync(IEnumerable`1 migrationCommands, IRelationalConnection connection, CancellationToken cancellationToken)
2024-03-10T16:29:05.6219411Z    at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQueryAsync(IEnumerable`1 migrationCommands, IRelationalConnection connection, CancellationToken cancellationToken)
2024-03-10T16:29:05.6228716Z    at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQueryAsync(IEnumerable`1 migrationCommands, IRelationalConnection connection, CancellationToken cancellationToken)
2024-03-10T16:29:05.6274637Z    at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQueryAsync(IEnumerable`1 migrationCommands, IRelationalConnection connection, CancellationToken cancellationToken)
2024-03-10T16:29:05.6276499Z    at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.MigrateAsync(String targetMigration, CancellationToken cancellationToken)
2024-03-10T16:29:05.6318174Z    at BSR.Beinni.EntityFrameworkCore.EntityFrameworkCoreBeinniDbSchemaMigrator.MigrateAsync() in D:\a\1\s\src\BSR.Beinni.EntityFrameworkCore\EntityFrameworkCore\EntityFrameworkCoreBeinniDbSchemaMigrator.cs:line 28
2024-03-10T16:29:05.6318733Z    at BSR.Beinni.Data.BeinniDbMigrationService.MigrateDatabaseSchemaAsync(Tenant tenant) in D:\a\1\s\src\BSR.Beinni.Domain\Data\BeinniDbMigrationService.cs:line 96
2024-03-10T16:29:05.6322334Z    at BSR.Beinni.Data.BeinniDbMigrationService.MigrateAsync() in D:\a\1\s\src\BSR.Beinni.Domain\Data\BeinniDbMigrationService.cs:line 53
2024-03-10T16:29:05.6325296Z    at BSR.Beinni.DbMigrator.DbMigratorHostedService.StartAsync(CancellationToken cancellationToken) in D:\a\1\s\src\BSR.Beinni.DbMigrator\DbMigratorHostedService.cs:line 39
2024-03-10T16:29:05.6325981Z    at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>b__15_1(IHostedService service, CancellationToken token)
2024-03-10T16:29:05.6326556Z    at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation)
2024-03-10T16:29:05.6327040Z    at Microsoft.Extensions.Hosting.Internal.Host.&lt;StartAsync&gt;g__LogAndRethrow|15_3(&lt;&gt;c__DisplayClass15_0&)
2024-03-10T16:29:05.6327419Z    at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
2024-03-10T16:29:05.6328422Z    at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
2024-03-10T16:29:05.6329008Z    at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
2024-03-10T16:29:05.6329425Z    at BSR.Beinni.DbMigrator.Program.Main(String[] args) in D:\a\1\s\src\BSR.Beinni.DbMigrator\Program.cs:line 31
2024-03-10T16:29:05.6329797Z    at BSR.Beinni.DbMigrator.Program.&lt;Main&gt;(String[] args)
2024-03-10T16:29:05.6330103Z ClientConnectionId:ce9179cc-e820-4477-81be-a41837b33ad2
2024-03-10T16:29:05.6330426Z Error Number:-2,State:0,Class:11

this is my migration

    name: "ExtraProperties",
    table: "AbpAuditLogs",
    type: "nvarchar(max)",
    nullable: false,
    defaultValue: "",
    oldClrType: typeof(string),
    oldType: "nvarchar(max)",
    oldNullable: true);

migrationBuilder.AlterColumn&lt;string&gt;(
    name: "ConcurrencyStamp",
    table: "AbpAuditLogs",
    type: "nvarchar(40)",
    maxLength: 40,
    nullable: false,
    defaultValue: "",
    oldClrType: typeof(string),
    oldType: "nvarchar(40)",
    oldMaxLength: 40,
    oldNullable: true);

I´m guessing this is connected to the size of the database server or need to incresing the size of the database to handle the migration. I´m guessing the production server can handle the migration but is there any standard way to do this (other than beefing up the hardware)?

  • ABP Framework version: v8.0.2
  • UI Type: Blazor Server
  • Database System: EF Core (SQL Server
  • Tiered (for MVC) or Auth Server Separated (for Angular): no

Are abp wrapped Blazorise component being updated with all the features that are beeing added montly by the Blazorise team?

The Grid component just been getting massive updates in every version for a long time https://blazorise.com/news/release-notes/140

I would like to see Suite take advantage of these updates and give us some check boxes or a better defaults when creating a page.

https://blazorise.com/docs/extensions/datagrid/features/grouping

Login with user (impersonate) when the user has changed the admin user from admin to something else is an issue. I got a call asking for help setting things up but they didn´t remember the user they were using. I had to SQL-it by hand.

So I suggest having a dropdown of available host users you can choose from. Even enhance this opup and show all users and have their **roles **also there.

I want to give a manager of my SaaS the rights to reset a users password but that permission is missing from the Identity Management. It is thankfully in the Saas Tenant management

but there is no such Set Password in Identity Management

Can you please add this permission. I don´t want to give my manager any more rights than I want.

And btw he should NOT be able to reset my host password. How can we prevent that?

Showing 31 to 40 of 210 entries
Made with ❤️ on ABP v9.0.0-preview Updated on September 19, 2024, 10:13