Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .docs/serverlessOverhaul.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Serverless SignalR Architecture Analysis

Here's how we could restructure:

## Current Architecture Issues

* Signal9.Hub runs as a Container App (always-on cost)
* Unnecessary complexity with hub hosting
* Over-engineered for the actual communication patterns needed

## Proposed Serverless Architecture

* Signal9.Web.Functions - Web portal backend, user management, dashboards
* Signal9.RMM.Functions - Agent communication, telemetry processing, command dispatch
* Azure SignalR Service - Direct connection management (no hub needed)

## Benefits

* True pay-per-use model
* Auto-scaling based on demand
* Reduced operational overhead
* Better separation of concerns between web and RMM functionality
29 changes: 29 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,32 @@ This is a .NET 9 based Remote Monitoring and Management (RMM) system with the fo
- Container apps should use minimal base images
- Configure health checks for all services
- Use staging slots for safe deployments

Follow these steps for each interaction:

1. User Identification:
- You should assume that you are interacting with default_user
- If you have not identified default_user, proactively try to do so.

2. Memory Retrieval:
- Always begin your chat by saying only "Remembering..." and retrieve all relevant information from your knowledge graph
- Always refer to your knowledge graph as your "memory"

3. Memory
- While conversing with the user, be attentive to any new information that falls into these categories:
a) Basic Identity (age, gender, location, job title, education level, etc.)
b) Behaviors (interests, habits, etc.)
c) Preferences (communication style, preferred language, etc.)
d) Goals (goals, targets, aspirations, etc.)
e) Relationships (personal and professional relationships up to 3 degrees of separation)

4. Memory Update:
- If any new information was gathered during the interaction, update your memory as follows:
a) Create entities for recurring organizations, people, and significant events
b) Connect them to the current entities using relations
c) Store facts about them as observations

5. Memory not found:
- Use `context7` to search for public information about various products, languages, and frameworks.
- Use `azure` to search for public information about Azure services and technologies and take actions.
- If you are unsure about the relevance of the information, ask the user for clarification
15 changes: 15 additions & 0 deletions .vscode/mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"servers": {
"context7": {
"type": "http",
"url": "https://mcp.context7.com/mcp"
},
"memory": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-memory"
]
}
}
}
27 changes: 13 additions & 14 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,13 @@
"isBackground": false
},
{
"label": "run-hub",
"label": "run-agent",
"type": "shell",
"command": "dotnet",
"args": [
"run",
"--project",
"src/Signal9.Hub"
"src/Signal9.Agent"
],
"group": "build",
"problemMatcher": [
Expand All @@ -79,13 +79,13 @@
}
},
{
"label": "run-agent",
"label": "run-webportal",
"type": "shell",
"command": "dotnet",
"args": [
"run",
"--project",
"src/Signal9.Agent"
"src/Signal9.Web"
],
"group": "build",
"problemMatcher": [
Expand All @@ -100,18 +100,17 @@
}
},
{
"label": "run-webportal",
"label": "run-rmm-functions",
"type": "shell",
"command": "dotnet",
"command": "func",
"args": [
"run",
"--project",
"src/Signal9.WebPortal"
"start"
],
"options": {
"cwd": "${workspaceFolder}/src/Signal9.RMM.Functions"
},
"group": "build",
"problemMatcher": [
"$msCompile"
],
"problemMatcher": [],
"isBackground": true,
"presentation": {
"echo": true,
Expand All @@ -121,14 +120,14 @@
}
},
{
"label": "run-functions",
"label": "run-web-functions",
"type": "shell",
"command": "func",
"args": [
"start"
],
"options": {
"cwd": "${workspaceFolder}/src/Signal9.Functions"
"cwd": "${workspaceFolder}/src/Signal9.Web.Functions"
},
"group": "build",
"problemMatcher": [],
Expand Down
32 changes: 16 additions & 16 deletions Signal9.sln
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Signal9.Shared", "src\Signa
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Signal9.Agent", "src\Signal9.Agent\Signal9.Agent.csproj", "{477FC460-8EF7-4718-930A-AB3550C33CFB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Signal9.Hub", "src\Signal9.Hub\Signal9.Hub.csproj", "{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Signal9.Web", "src\Signal9.Web\Signal9.Web.csproj", "{F9EA2388-5F37-4C8C-84D7-A03B844A578B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Signal9.WebPortal", "src\Signal9.WebPortal\Signal9.WebPortal.csproj", "{F9EA2388-5F37-4C8C-84D7-A03B844A578B}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Signal9.Web.Functions", "src\Signal9.Web.Functions\Signal9.Web.Functions.csproj", "{6776C28C-F128-426A-84D6-B6B526A8FA97}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Signal9.Functions", "src\Signal9.Functions\Signal9.Functions.csproj", "{6776C28C-F128-426A-84D6-B6B526A8FA97}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Signal9.Agent.Functions", "src\Signal9.Agent.Functions\Signal9.Agent.Functions.csproj", "{A1234567-B890-1234-5678-9ABCDEF01234}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down Expand Up @@ -49,18 +49,6 @@ Global
{477FC460-8EF7-4718-930A-AB3550C33CFB}.Release|x64.Build.0 = Release|Any CPU
{477FC460-8EF7-4718-930A-AB3550C33CFB}.Release|x86.ActiveCfg = Release|Any CPU
{477FC460-8EF7-4718-930A-AB3550C33CFB}.Release|x86.Build.0 = Release|Any CPU
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}.Debug|x64.ActiveCfg = Debug|Any CPU
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}.Debug|x64.Build.0 = Debug|Any CPU
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}.Debug|x86.ActiveCfg = Debug|Any CPU
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}.Debug|x86.Build.0 = Debug|Any CPU
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}.Release|Any CPU.Build.0 = Release|Any CPU
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}.Release|x64.ActiveCfg = Release|Any CPU
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}.Release|x64.Build.0 = Release|Any CPU
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}.Release|x86.ActiveCfg = Release|Any CPU
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208}.Release|x86.Build.0 = Release|Any CPU
{F9EA2388-5F37-4C8C-84D7-A03B844A578B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F9EA2388-5F37-4C8C-84D7-A03B844A578B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F9EA2388-5F37-4C8C-84D7-A03B844A578B}.Debug|x64.ActiveCfg = Debug|Any CPU
Expand All @@ -85,15 +73,27 @@ Global
{6776C28C-F128-426A-84D6-B6B526A8FA97}.Release|x64.Build.0 = Release|Any CPU
{6776C28C-F128-426A-84D6-B6B526A8FA97}.Release|x86.ActiveCfg = Release|Any CPU
{6776C28C-F128-426A-84D6-B6B526A8FA97}.Release|x86.Build.0 = Release|Any CPU
{A1234567-B890-1234-5678-9ABCDEF01234}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A1234567-B890-1234-5678-9ABCDEF01234}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1234567-B890-1234-5678-9ABCDEF01234}.Debug|x64.ActiveCfg = Debug|Any CPU
{A1234567-B890-1234-5678-9ABCDEF01234}.Debug|x64.Build.0 = Debug|Any CPU
{A1234567-B890-1234-5678-9ABCDEF01234}.Debug|x86.ActiveCfg = Debug|Any CPU
{A1234567-B890-1234-5678-9ABCDEF01234}.Debug|x86.Build.0 = Debug|Any CPU
{A1234567-B890-1234-5678-9ABCDEF01234}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1234567-B890-1234-5678-9ABCDEF01234}.Release|Any CPU.Build.0 = Release|Any CPU
{A1234567-B890-1234-5678-9ABCDEF01234}.Release|x64.ActiveCfg = Release|Any CPU
{A1234567-B890-1234-5678-9ABCDEF01234}.Release|x64.Build.0 = Release|Any CPU
{A1234567-B890-1234-5678-9ABCDEF01234}.Release|x86.ActiveCfg = Release|Any CPU
{A1234567-B890-1234-5678-9ABCDEF01234}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{7AF77504-742A-4FE5-A72E-88B27BC97DCD} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{477FC460-8EF7-4718-930A-AB3550C33CFB} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{5700E169-ABE1-4E5A-8B31-D66DC8AA6208} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{F9EA2388-5F37-4C8C-84D7-A03B844A578B} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{6776C28C-F128-426A-84D6-B6B526A8FA97} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{A1234567-B890-1234-5678-9ABCDEF01234} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
EndGlobalSection
EndGlobal
34 changes: 17 additions & 17 deletions azure.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,60 +3,60 @@ metadata:
template: [email protected]

services:
hub:
project: ./src/Signal9.Hub
web-functions:
project: ./src/Signal9.Web.Functions
language: csharp
host: containerapp
host: function
hooks:
prebuild:
windows:
shell: pwsh
run: |
echo "Building Signal9 Hub..."
echo "Building Signal9 Web Functions..."
dotnet restore
dotnet build --configuration Release
posix:
shell: sh
run: |
echo "Building Signal9 Hub..."
echo "Building Signal9 Web Functions..."
dotnet restore
dotnet build --configuration Release
web:
project: ./src/Signal9.WebPortal

agent-functions:
project: ./src/Signal9.Agent.Functions
language: csharp
host: containerapp
host: function
hooks:
prebuild:
windows:
shell: pwsh
run: |
echo "Building Signal9 Web Portal..."
echo "Building Signal9 Agent Functions..."
dotnet restore
dotnet build --configuration Release
posix:
shell: sh
run: |
echo "Building Signal9 Web Portal..."
echo "Building Signal9 Agent Functions..."
dotnet restore
dotnet build --configuration Release

functions:
project: ./src/Signal9.Functions
web:
project: ./src/Signal9.Web
language: csharp
host: function
host: appservice
hooks:
prebuild:
windows:
shell: pwsh
run: |
echo "Building Signal9 Functions..."
echo "Building Signal9 Web..."
dotnet restore
dotnet build --configuration Release
posix:
shell: sh
run: |
echo "Building Signal9 Functions..."
echo "Building Signal9 Web..."
dotnet restore
dotnet build --configuration Release

Expand Down
Loading
Loading