стабилизация кода

This commit is contained in:
vpodberezsky
2026-01-10 11:04:15 +03:00
parent ec07c6ab7d
commit 2544275792
320 changed files with 9018 additions and 64119 deletions

View File

@@ -0,0 +1,208 @@
{
"Version": 1,
"WorkspaceRootPath": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\services\\natsconsumerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\services\\natsconsumerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\services\\influxdbservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\services\\influxdbservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\readme.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\readme.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\models\\temperaturemessage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\models\\temperaturemessage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\configuration\\appsettings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\configuration\\appsettings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\services\\natsinfluxservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\services\\natsinfluxservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\models\\temperaturedata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\models\\temperaturedata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\programalice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\programalice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\docker-compose.yml||{06C066C6-04A2-4E5D-8202-439FD4234EF1}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\docker-compose.yml||{06C066C6-04A2-4E5D-8202-439FD4234EF1}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 7,
"Children": [
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Program.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Program.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Program.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Program.cs",
"RelativeToolTip": "DataProxyApp\\Program.cs",
"ViewState": "AgIAABIAAAAAAAAAAIAxwCsAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T07:31:08.53Z",
"IsPinned": true,
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "readme.md",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\readme.md",
"RelativeDocumentMoniker": "DataProxyApp\\readme.md",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\readme.md",
"RelativeToolTip": "DataProxyApp\\readme.md",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAEAAAAoAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001818|",
"WhenOpened": "2025-12-20T16:31:48.911Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "appsettings.json",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\appsettings.json",
"RelativeDocumentMoniker": "DataProxyApp\\appsettings.json",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\appsettings.json",
"RelativeToolTip": "DataProxyApp\\appsettings.json",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAiAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2025-12-20T11:03:33.4Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "TemperatureData.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Models\\TemperatureData.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Models\\TemperatureData.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Models\\TemperatureData.cs",
"RelativeToolTip": "DataProxyApp\\Models\\TemperatureData.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T08:34:21.284Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "NatsInfluxService.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Services\\NatsInfluxService.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Services\\NatsInfluxService.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Services\\NatsInfluxService.cs",
"RelativeToolTip": "DataProxyApp\\Services\\NatsInfluxService.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAqwA4AAAALAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T08:33:48.456Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "ProgramAlice.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\ProgramAlice.cs",
"RelativeDocumentMoniker": "DataProxyApp\\ProgramAlice.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\ProgramAlice.cs",
"RelativeToolTip": "DataProxyApp\\ProgramAlice.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAjAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T08:33:29.837Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "docker-compose.yml",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\docker-compose.yml",
"RelativeDocumentMoniker": "DataProxyApp\\docker-compose.yml",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\docker-compose.yml",
"RelativeToolTip": "DataProxyApp\\docker-compose.yml",
"ViewState": "AgIAABAAAAAAAAAAAAAQwC4AAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003775|",
"WhenOpened": "2025-12-20T08:31:51.21Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "NatsConsumerService.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Services\\NatsConsumerService.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Services\\NatsConsumerService.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Services\\NatsConsumerService.cs",
"RelativeToolTip": "DataProxyApp\\Services\\NatsConsumerService.cs",
"ViewState": "AgIAAD0AAAAAAAAAAAAAAEUAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T07:38:55.68Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "InfluxDbService.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Services\\InfluxDbService.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Services\\InfluxDbService.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Services\\InfluxDbService.cs",
"RelativeToolTip": "DataProxyApp\\Services\\InfluxDbService.cs",
"ViewState": "AgIAABwAAAAAAAAAAAAqwC8AAAAFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T07:38:14.753Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "AppSettings.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Configuration\\AppSettings.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Configuration\\AppSettings.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Configuration\\AppSettings.cs",
"RelativeToolTip": "DataProxyApp\\Configuration\\AppSettings.cs",
"ViewState": "AgIAAAEAAAAAAAAAAAASwAYAAABCAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T07:37:40.149Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "TemperatureMessage.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Models\\TemperatureMessage.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Models\\TemperatureMessage.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Models\\TemperatureMessage.cs",
"RelativeToolTip": "DataProxyApp\\Models\\TemperatureMessage.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAqwBAAAAAnAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T07:36:37.198Z",
"EditorCaption": ""
}
]
}
]
}
]
}

View File

@@ -0,0 +1,208 @@
{
"Version": 1,
"WorkspaceRootPath": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\services\\natsconsumerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\services\\natsconsumerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\services\\influxdbservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\services\\influxdbservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\readme.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\readme.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\models\\temperaturemessage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\models\\temperaturemessage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\configuration\\appsettings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\configuration\\appsettings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\services\\natsinfluxservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\services\\natsinfluxservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\models\\temperaturedata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\models\\temperaturedata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\programalice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\programalice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|d:\\!!!gitea\\homeon\\homeonapp\\services\\dataproxyapp\\dataproxyapp\\docker-compose.yml||{06C066C6-04A2-4E5D-8202-439FD4234EF1}",
"RelativeMoniker": "D:0:0:{4F56D57D-DF46-ACFD-25A6-C3ACF9C4D352}|DataProxyApp\\DataProxyApp.csproj|solutionrelative:dataproxyapp\\docker-compose.yml||{06C066C6-04A2-4E5D-8202-439FD4234EF1}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 7,
"Children": [
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Program.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Program.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Program.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Program.cs",
"RelativeToolTip": "DataProxyApp\\Program.cs",
"ViewState": "AgIAABIAAAAAAAAAAIAxwCsAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T07:31:08.53Z",
"IsPinned": true,
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "readme.md",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\readme.md",
"RelativeDocumentMoniker": "DataProxyApp\\readme.md",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\readme.md",
"RelativeToolTip": "DataProxyApp\\readme.md",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAEAAAAoAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001818|",
"WhenOpened": "2025-12-20T16:31:48.911Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "appsettings.json",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\appsettings.json",
"RelativeDocumentMoniker": "DataProxyApp\\appsettings.json",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\appsettings.json",
"RelativeToolTip": "DataProxyApp\\appsettings.json",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAiAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2025-12-20T11:03:33.4Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "TemperatureData.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Models\\TemperatureData.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Models\\TemperatureData.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Models\\TemperatureData.cs",
"RelativeToolTip": "DataProxyApp\\Models\\TemperatureData.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T08:34:21.284Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "NatsInfluxService.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Services\\NatsInfluxService.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Services\\NatsInfluxService.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Services\\NatsInfluxService.cs",
"RelativeToolTip": "DataProxyApp\\Services\\NatsInfluxService.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAqwA4AAAALAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T08:33:48.456Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "ProgramAlice.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\ProgramAlice.cs",
"RelativeDocumentMoniker": "DataProxyApp\\ProgramAlice.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\ProgramAlice.cs",
"RelativeToolTip": "DataProxyApp\\ProgramAlice.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAjAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T08:33:29.837Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "docker-compose.yml",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\docker-compose.yml",
"RelativeDocumentMoniker": "DataProxyApp\\docker-compose.yml",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\docker-compose.yml",
"RelativeToolTip": "DataProxyApp\\docker-compose.yml",
"ViewState": "AgIAABAAAAAAAAAAAAAQwC4AAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003775|",
"WhenOpened": "2025-12-20T08:31:51.21Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "NatsConsumerService.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Services\\NatsConsumerService.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Services\\NatsConsumerService.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Services\\NatsConsumerService.cs",
"RelativeToolTip": "DataProxyApp\\Services\\NatsConsumerService.cs",
"ViewState": "AgIAACIAAAAAAAAAAAAowDEAAAAqAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T07:38:55.68Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "InfluxDbService.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Services\\InfluxDbService.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Services\\InfluxDbService.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Services\\InfluxDbService.cs",
"RelativeToolTip": "DataProxyApp\\Services\\InfluxDbService.cs",
"ViewState": "AgIAABwAAAAAAAAAAAAqwC8AAAAFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T07:38:14.753Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "AppSettings.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Configuration\\AppSettings.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Configuration\\AppSettings.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Configuration\\AppSettings.cs",
"RelativeToolTip": "DataProxyApp\\Configuration\\AppSettings.cs",
"ViewState": "AgIAAAEAAAAAAAAAAAASwAYAAABCAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T07:37:40.149Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "TemperatureMessage.cs",
"DocumentMoniker": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Models\\TemperatureMessage.cs",
"RelativeDocumentMoniker": "DataProxyApp\\Models\\TemperatureMessage.cs",
"ToolTip": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\Models\\TemperatureMessage.cs",
"RelativeToolTip": "DataProxyApp\\Models\\TemperatureMessage.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAqwBAAAAAnAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-12-20T07:36:37.198Z",
"EditorCaption": ""
}
]
}
]
}
]
}

View File

@@ -0,0 +1,3 @@
<Solution>
<Project Path="DataProxyApp/DataProxyApp.csproj" />
</Solution>

View File

@@ -0,0 +1,25 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/bin
**/charts
**/docker-compose*
**/compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md

View File

@@ -0,0 +1,20 @@
namespace NatsToInfluxService.Configuration;
public class NatsSettings
{
public const string SectionName = "Nats";
public string Url { get; set; } = "nats://nats.paranet.ru:4222";
public string Subject { get; set; } = "temperature.data";
public string QueueGroup { get; set; } = "temperature-consumers";
}
public class InfluxDbSettings
{
public const string SectionName = "InfluxDb";
public string Url { get; set; } = "http://dbs.lan:8086";
public string Token { get; set; } = string.Empty;
public string Bucket { get; set; } = "sensors";
public string Organization { get; set; } = "HomeOn";
}

View File

@@ -0,0 +1,33 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Compile Remove="ProgramAlice.cs" />
<Compile Remove="Services\NatsInfluxService.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="InfluxDB.Client" Version="4.18.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.1" />
<PackageReference Include="NATS.Net" Version="2.7.0" />
<PackageReference Include="Microsoft.Extensions.Diagnostics" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.1" />
</ItemGroup>
<ItemGroup>
<None Update="appsettings.Development.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,14 @@
FROM mcr.microsoft.com/dotnet/runtime:10.0 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY ["DataProxyApp.csproj", "."]
RUN dotnet restore "DataProxyApp.csproj"
COPY . .
RUN dotnet publish "DataProxyApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "DataProxyApp.dll"]

View File

@@ -0,0 +1,6 @@
public class TemperatureData
{
public string SensorId { get; set; }
public double Value { get; set; }
public DateTime Timestamp { get; set; }
}

View File

@@ -0,0 +1,24 @@
using System.Text.Json.Serialization;
namespace NatsToInfluxService.Models;
public class TemperatureMessage
{
[JsonPropertyName("deviceId")]
public string DeviceId { get; set; } = string.Empty;
[JsonPropertyName("location")]
public string Location { get; set; } = string.Empty;
[JsonPropertyName("value")]
public float Value { get; set; }
[JsonPropertyName("unit")]
public string Unit { get; set; } = "Celsius";
[JsonPropertyName("timestamp")]
public DateTime Timestamp { get; set; }
[JsonPropertyName("metadata")]
public Dictionary<string, string>? Metadata { get; set; }
}

View File

@@ -0,0 +1,66 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using NatsToInfluxService.Configuration;
using NatsToInfluxService.Services;
var builder = Host.CreateApplicationBuilder(args);
// Конфигурация
builder.Configuration
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
// Настройка логгирования
builder.Logging.AddConsole();
// Регистрация настроек
builder.Services.Configure<NatsSettings>(
builder.Configuration.GetSection(NatsSettings.SectionName));
builder.Services.Configure<InfluxDbSettings>(
builder.Configuration.GetSection(InfluxDbSettings.SectionName));
// Регистрация сервисов
builder.Services.AddSingleton<IInfluxDbService, InfluxDbService>();
builder.Services.AddHostedService<NatsConsumerService>();
// Health checks
//builder.Services.AddHealthChecks()
// .AddCheck<InfluxDbHealthCheck>("influxdb");
var host = builder.Build();
// Health check endpoint
host.Services.GetRequiredService<IHostApplicationLifetime>()
.ApplicationStarted.Register(() =>
{
var logger = host.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Application started");
});
await host.RunAsync();
// Health check класс
//public class InfluxDbHealthCheck : Microsoft.Extensions.Diagnostics.HealthChecks.IHealthCheck
//{
// private readonly IInfluxDbService _influxDbService;
// public InfluxDbHealthCheck(IInfluxDbService influxDbService)
// {
// _influxDbService = influxDbService;
// }
// public async Task<HealthCheckResult> CheckHealthAsync(
// HealthCheckContext context,
// CancellationToken cancellationToken = default)
// {
// var isHealthy = await _influxDbService.HealthCheckAsync();
// return isHealthy
// ? HealthCheckResult.Healthy("InfluxDB connection is OK")
// : HealthCheckResult.Unhealthy("InfluxDB connection failed");
// }
//}

View File

@@ -0,0 +1,22 @@
using Microsoft.Extensions.Configuration;
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
var configuration = builder.Build();
var service = new NatsInfluxService(configuration);
service.Start();
// Ожидание завершения (например, по Ctrl+C)
Console.CancelKeyPress += (sender, e) =>
{
service.Stop();
Environment.Exit(0);
};
while (true)
{
await Task.Delay(1000);
}

View File

@@ -0,0 +1,105 @@
using InfluxDB.Client;
using InfluxDB.Client.Api.Domain;
using InfluxDB.Client.Writes;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using NatsToInfluxService.Configuration;
using NatsToInfluxService.Models;
namespace NatsToInfluxService.Services;
public interface IInfluxDbService
{
Task WriteTemperatureAsync(TemperatureMessage message);
Task<bool> HealthCheckAsync();
}
public class InfluxDbService : IInfluxDbService, IAsyncDisposable
{
private readonly InfluxDBClient _client;
private readonly InfluxDbSettings _settings;
private readonly WriteApiAsync _writeApi;
private readonly ILogger<InfluxDbService> _logger;
public InfluxDbService(
IOptions<InfluxDbSettings> settings,
ILogger<InfluxDbService> logger)
{
_settings = settings.Value;
_logger = logger;
//_client = InfluxDBClientFactory.Create(
// _settings.Url,
// _settings.Token.ToCharArray(),
// _settings.Organization,
// _settings.Bucket
//);
var token = "4v0t0MAsS2nRBVPPxXQA4aIqgQpxt1ZmlCCtPUcRlfKqiuW-tFn9-MUhI_StwoeWoWPrwrnnUVg3OzLEUMquXw=="; //Environment.GetEnvironmentVariable("INFLUX_TOKEN")!;
const string bucket = "sensors";
const string org = "HomeOn";
_client = new InfluxDBClient("http://dbs.lan:8086", token);
_writeApi = _client.GetWriteApiAsync();
}
public async Task WriteTemperatureAsync(TemperatureMessage message)
{
try
{
var point = PointData
.Measurement("temperature")
.Tag("device_id", message.DeviceId)
//.Tag("location", message.Location)
.Tag("unit", message.Unit)
.Field("value", message.Value)
.Timestamp(message.Timestamp, WritePrecision.Ns);
// Добавляем метаданные как дополнительные теги
if (message.Metadata != null)
{
foreach (var metadata in message.Metadata)
{
point = point.Tag(metadata.Key, metadata.Value);
}
}
await _writeApi.WritePointAsync(point: point, bucket: "sensors", org: "HomeOn");
_logger.LogDebug(
"Temperature written to InfluxDB: Device={DeviceId}, Value={Value}, Time={Timestamp}",
message.DeviceId, message.Value, message.Timestamp);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error writing temperature to InfluxDB");
throw;
}
}
//public async Task<bool> HealthCheckAsync()
//{
// try
// {
// var health = await _client.HealthAsync();
// return health.Status == HealthStatus.Pass;
// }
// catch
// {
// return false;
// }
//}
public async ValueTask DisposeAsync()
{
//await _writeApi.DisposeAsync();
_client.Dispose();
GC.SuppressFinalize(this);
}
public Task<bool> HealthCheckAsync()
{
return Task.FromResult( true);
}
}

View File

@@ -0,0 +1,192 @@
using InfluxDB.Client.Api.Domain;
using InfluxDB.Client.Writes;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using NATS.Client.Core;
using NATS.Net;
using NatsToInfluxService.Configuration;
using NatsToInfluxService.Models;
using System.Globalization;
using System.Text;
using System.Text.Json;
namespace NatsToInfluxService.Services;
public class NatsConsumerService : BackgroundService
{
private readonly NatsSettings _natsSettings;
private readonly IInfluxDbService _influxDbService;
private readonly ILogger<NatsConsumerService> _logger;
//private NatsConnection? _natsConnection;
private readonly NatsClient natsClient;
public NatsConsumerService(
IOptions<NatsSettings> natsSettings,
IInfluxDbService influxDbService,
ILogger<NatsConsumerService> logger)
{
_natsSettings = natsSettings.Value;
_influxDbService = influxDbService;
_logger = logger;
var opts = new NatsOpts
{
Url = _natsSettings.Url,
Name = $"TemperatureConsumer-{Guid.NewGuid():N}",
ConnectTimeout = TimeSpan.FromSeconds(30),
ReconnectWaitMax = TimeSpan.FromSeconds(10)
};
natsClient = new(opts);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("Starting NATS consumer service...");
//_natsConnection = new NatsConnection(opts);
// Проверка подключения к InfluxDB
//var isInfluxHealthy = await _influxDbService.HealthCheckAsync();
//if (!isInfluxHealthy)
//{
// _logger.LogError("Cannot connect to InfluxDB. Service will not start.");
// return;
//}
//_logger.LogInformation(
// "Subscribing to NATS subject: {Subject} in queue group: {QueueGroup}",
// _natsSettings.Subject, _natsSettings.QueueGroup);
//await _natsConnection.SubscribeAsync(
// subject: _natsSettings.Subject,
// queueGroup: _natsSettings.QueueGroup,
// handler: async (NatsMsg msg) =>
// {
// await ProcessMessageAsync(msg, stoppingToken);
// },
// cancellationToken: stoppingToken);
//natsClient.SubscribeAsync<double>(natsSettings.Subject)
try
{
await foreach (var msg in natsClient.SubscribeAsync<string>("/sensors/meteoout", cancellationToken: stoppingToken))
{
Console.WriteLine($"New exchange rate. {msg.Subject}: {msg.Data:F2} - press ENTER to exit.");
var data = msg.Data;
if (!string.IsNullOrEmpty(data))
{
if (TryParseFloat(data, out float tempValue))
{
// Отправляем точку данных в InfluxDB
//await WritePoint(tempValue);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error consuming messages: {ex.Message}");
}
_logger.LogInformation("NATS consumer service started successfully");
// Ожидаем отмены
await WaitForCancellationAsync(stoppingToken);
}
public static bool TryParseFloat(string input, out float result)
{
// Сначала пробуем с инвариантной культурой (для точки)
if (float.TryParse(input, NumberStyles.Any, CultureInfo.InvariantCulture, out result))
return true;
// Потом пробуем с культурой, где разделитель - запятая
if (float.TryParse(input, NumberStyles.Any, CultureInfo.GetCultureInfo("ru-RU"), out result))
return true;
// Можно добавить другие культуры при необходимости
return false;
}
private async Task WritePoint(float value)
{
await _influxDbService.WriteTemperatureAsync(new()
{
DeviceId = "outdoor",
Value = value,
Timestamp = DateTime.UtcNow
});
}
//private async ValueTask ProcessMessageAsync(NatsMsg message, CancellationToken cancellationToken)
//{
// try
// {
// var json = Encoding.UTF8.GetString(message.Data.ToArray());
// _logger.LogDebug("Received message: {Message}", json);
// var temperatureMessage = JsonSerializer.Deserialize<TemperatureMessage>(
// json,
// new JsonSerializerOptions
// {
// PropertyNameCaseInsensitive = true
// });
// if (temperatureMessage == null)
// {
// _logger.LogWarning("Failed to deserialize message: {Message}", json);
// return;
// }
// // Если timestamp не указан, используем текущее время
// if (temperatureMessage.Timestamp == default)
// {
// temperatureMessage.Timestamp = DateTime.UtcNow;
// }
// await _influxDbService.WriteTemperatureAsync(temperatureMessage);
// _logger.LogInformation(
// "Successfully processed temperature: Device={DeviceId}, Value={Value}°C",
// temperatureMessage.DeviceId, temperatureMessage.Value);
// }
// catch (JsonException ex)
// {
// _logger.LogError(ex, "JSON parsing error");
// }
// catch (Exception ex)
// {
// _logger.LogError(ex, "Error processing NATS message");
// }
//}
private async Task WaitForCancellationAsync(CancellationToken cancellationToken)
{
try
{
while (!cancellationToken.IsCancellationRequested)
{
await Task.Delay(1000, cancellationToken);
}
}
catch (TaskCanceledException)
{
// Ожидаемое исключение при остановке
}
}
//public override async Task StopAsync(CancellationToken cancellationToken)
//{
// _logger.LogInformation("Stopping NATS consumer service...");
// if (_natsConnection != null)
// {
// await _natsConnection.DisposeAsync();
// }
// await base.StopAsync(cancellationToken);
// _logger.LogInformation("NATS consumer service stopped");
//}
}

View File

@@ -0,0 +1,78 @@
using InfluxDB.Client;
using InfluxDB.Client.Api.Domain;
using InfluxDB.Client.Writes;
using Microsoft.Extensions.Configuration;
using System.Text;
using System.Text.Json;
public class NatsInfluxService
{
private readonly IConfiguration _configuration;
private IConnection _natsConnection;
private InfluxDBClient _influxClient;
private WriteApi _writeApi;
public NatsInfluxService(IConfiguration configuration)
{
_configuration = configuration;
}
public void Start()
{
// Инициализация NATS
var natsOpts = ConnectionFactory.GetDefaultOptions();
natsOpts.Url = _configuration["NATS:Url"];
_natsConnection = new ConnectionFactory().CreateConnection(natsOpts);
// Инициализация InfluxDB
_influxClient = InfluxDBClientFactory.Create(
_configuration["InfluxDB:Url"],
_configuration["InfluxDB:Token"].ToCharArray()
);
_writeApi = _influxClient.GetWriteApi();
// Подписка на NATS
_natsConnection.SubscribeAsync(_configuration["NATS:Subject"], (sender, args) =>
{
var msg = args.Message;
var body = Encoding.UTF8.GetString(msg.Data);
try
{
var data = JsonSerializer.Deserialize<TemperatureData>(body);
if (data != null)
{
WriteToInflux(data);
}
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка парсинга JSON: {ex.Message}");
}
});
Console.WriteLine("Сервис запущен. Ожидание сообщений...");
}
private void WriteToInflux(TemperatureData data)
{
var point = PointData
.Measurement("temperature")
.Tag("sensor_id", data.SensorId)
.Field("value", data.Value)
.Timestamp(data.Timestamp, WritePrecision.Ns);
_writeApi.WritePoint(_configuration["InfluxDB:Bucket"],
_configuration["InfluxDB:Org"],
point);
Console.WriteLine($"Записан: {data.SensorId} = {data.Value}°C");
}
public void Stop()
{
_writeApi?.Dispose();
_influxClient?.Dispose();
_natsConnection?.Close();
}
}

View File

@@ -0,0 +1,18 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"NATS": {
"Url": "nats://nats.paranet.ru:4222",
"Subject": "sensor.temperature"
},
"InfluxDB": {
"Url": "http://influxdb:8086",
"Token": "your-influx-token",
"Org": "your-org",
"Bucket": "temperatures"
}
}

View File

@@ -0,0 +1,12 @@
{
"runtimeOptions": {
"tfm": "net10.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "10.0.0"
},
"configProperties": {
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

View File

@@ -0,0 +1,18 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"NATS": {
"Url": "nats://nats.paranet.ru:4222",
"Subject": "sensor.temperature"
},
"InfluxDB": {
"Url": "http://influxdb:8086",
"Token": "your-influx-token",
"Org": "your-org",
"Bucket": "temperatures"
}
}

View File

@@ -0,0 +1,46 @@
version: '3.8'
services:
nats:
image: nats:2.10
ports:
- "4222:4222"
command: [
"--http_port", "8222",
"--tls", "--tls_cert", "/certs/server-cert.pem",
"--tls_key", "/certs/server-key.pem"
]
volumes:
- ./certs:/certs
influxdb:
image: influxdb:2.7
ports:
- "8086:8086"
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=admin
- DOCKER_INFLUXDB_INIT_PASSWORD=password
- DOCKER_INFLUXDB_INIT_ORG=your-org
- DOCKER_INFLUXDB_INIT_BUCKET=temperatures
- DOCKER_INFLUXDB_INIT_RETENTION=7d
- DOCKER_INFLUXDB_INIT_TOKEN=your-influx-token
volumes:
- influxdb-data:/var/lib/influxdb2
app:
build: .
depends_on:
- nats
- influxdb
environment:
- NATS__Url=nats://nats:4222
- NATS__Subject=sensor.temperature
- InfluxDB__Url=http://influxdb:8086
- InfluxDB__Token=your-influx-token
- InfluxDB__Org=your-org
- InfluxDB__Bucket=temperatures
restart: unless-stopped
volumes:
influxdb-data:

View File

@@ -0,0 +1,373 @@
{
"format": 1,
"restore": {
"D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\DataProxyApp.csproj": {}
},
"projects": {
"D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\DataProxyApp.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\DataProxyApp.csproj",
"projectName": "DataProxyApp",
"projectPath": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\DataProxyApp.csproj",
"packagesPath": "C:\\Users\\vpodberezsky\\.nuget\\packages\\",
"outputPath": "D:\\!!!gitea\\homeOn\\HomeOnApp\\Services\\DataProxyApp\\DataProxyApp\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\vpodberezsky\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net10.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net10.0": {
"targetAlias": "net10.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "all"
},
"SdkAnalysisLevel": "10.0.100"
},
"frameworks": {
"net10.0": {
"targetAlias": "net10.0",
"dependencies": {
"InfluxDB.Client": {
"target": "Package",
"version": "[4.18.0, )"
},
"Microsoft.Extensions.Configuration": {
"target": "Package",
"version": "[10.0.1, )"
},
"Microsoft.Extensions.Configuration.Json": {
"target": "Package",
"version": "[10.0.1, )"
},
"Microsoft.Extensions.Diagnostics": {
"target": "Package",
"version": "[10.0.1, )"
},
"Microsoft.Extensions.Hosting": {
"target": "Package",
"version": "[10.0.1, )"
},
"NATS.Net": {
"target": "Package",
"version": "[2.7.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.101/PortableRuntimeIdentifierGraph.json",
"packagesToPrune": {
"Microsoft.CSharp": "(,4.7.32767]",
"Microsoft.VisualBasic": "(,10.4.32767]",
"Microsoft.Win32.Primitives": "(,4.3.32767]",
"Microsoft.Win32.Registry": "(,5.0.32767]",
"runtime.any.System.Collections": "(,4.3.32767]",
"runtime.any.System.Diagnostics.Tools": "(,4.3.32767]",
"runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]",
"runtime.any.System.Globalization": "(,4.3.32767]",
"runtime.any.System.Globalization.Calendars": "(,4.3.32767]",
"runtime.any.System.IO": "(,4.3.32767]",
"runtime.any.System.Reflection": "(,4.3.32767]",
"runtime.any.System.Reflection.Extensions": "(,4.3.32767]",
"runtime.any.System.Reflection.Primitives": "(,4.3.32767]",
"runtime.any.System.Resources.ResourceManager": "(,4.3.32767]",
"runtime.any.System.Runtime": "(,4.3.32767]",
"runtime.any.System.Runtime.Handles": "(,4.3.32767]",
"runtime.any.System.Runtime.InteropServices": "(,4.3.32767]",
"runtime.any.System.Text.Encoding": "(,4.3.32767]",
"runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]",
"runtime.any.System.Threading.Tasks": "(,4.3.32767]",
"runtime.any.System.Threading.Timer": "(,4.3.32767]",
"runtime.aot.System.Collections": "(,4.3.32767]",
"runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]",
"runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]",
"runtime.aot.System.Globalization": "(,4.3.32767]",
"runtime.aot.System.Globalization.Calendars": "(,4.3.32767]",
"runtime.aot.System.IO": "(,4.3.32767]",
"runtime.aot.System.Reflection": "(,4.3.32767]",
"runtime.aot.System.Reflection.Extensions": "(,4.3.32767]",
"runtime.aot.System.Reflection.Primitives": "(,4.3.32767]",
"runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]",
"runtime.aot.System.Runtime": "(,4.3.32767]",
"runtime.aot.System.Runtime.Handles": "(,4.3.32767]",
"runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]",
"runtime.aot.System.Text.Encoding": "(,4.3.32767]",
"runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]",
"runtime.aot.System.Threading.Tasks": "(,4.3.32767]",
"runtime.aot.System.Threading.Timer": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
"runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
"runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]",
"runtime.unix.System.Console": "(,4.3.32767]",
"runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]",
"runtime.unix.System.IO.FileSystem": "(,4.3.32767]",
"runtime.unix.System.Net.Primitives": "(,4.3.32767]",
"runtime.unix.System.Net.Sockets": "(,4.3.32767]",
"runtime.unix.System.Private.Uri": "(,4.3.32767]",
"runtime.unix.System.Runtime.Extensions": "(,4.3.32767]",
"runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]",
"runtime.win.System.Console": "(,4.3.32767]",
"runtime.win.System.Diagnostics.Debug": "(,4.3.32767]",
"runtime.win.System.IO.FileSystem": "(,4.3.32767]",
"runtime.win.System.Net.Primitives": "(,4.3.32767]",
"runtime.win.System.Net.Sockets": "(,4.3.32767]",
"runtime.win.System.Runtime.Extensions": "(,4.3.32767]",
"runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
"runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]",
"runtime.win7.System.Private.Uri": "(,4.3.32767]",
"runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]",
"System.AppContext": "(,4.3.32767]",
"System.Buffers": "(,5.0.32767]",
"System.Collections": "(,4.3.32767]",
"System.Collections.Concurrent": "(,4.3.32767]",
"System.Collections.Immutable": "(,10.0.32767]",
"System.Collections.NonGeneric": "(,4.3.32767]",
"System.Collections.Specialized": "(,4.3.32767]",
"System.ComponentModel": "(,4.3.32767]",
"System.ComponentModel.Annotations": "(,4.3.32767]",
"System.ComponentModel.EventBasedAsync": "(,4.3.32767]",
"System.ComponentModel.Primitives": "(,4.3.32767]",
"System.ComponentModel.TypeConverter": "(,4.3.32767]",
"System.Console": "(,4.3.32767]",
"System.Data.Common": "(,4.3.32767]",
"System.Data.DataSetExtensions": "(,4.4.32767]",
"System.Diagnostics.Contracts": "(,4.3.32767]",
"System.Diagnostics.Debug": "(,4.3.32767]",
"System.Diagnostics.DiagnosticSource": "(,10.0.32767]",
"System.Diagnostics.FileVersionInfo": "(,4.3.32767]",
"System.Diagnostics.Process": "(,4.3.32767]",
"System.Diagnostics.StackTrace": "(,4.3.32767]",
"System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]",
"System.Diagnostics.Tools": "(,4.3.32767]",
"System.Diagnostics.TraceSource": "(,4.3.32767]",
"System.Diagnostics.Tracing": "(,4.3.32767]",
"System.Drawing.Primitives": "(,4.3.32767]",
"System.Dynamic.Runtime": "(,4.3.32767]",
"System.Formats.Asn1": "(,10.0.32767]",
"System.Formats.Tar": "(,10.0.32767]",
"System.Globalization": "(,4.3.32767]",
"System.Globalization.Calendars": "(,4.3.32767]",
"System.Globalization.Extensions": "(,4.3.32767]",
"System.IO": "(,4.3.32767]",
"System.IO.Compression": "(,4.3.32767]",
"System.IO.Compression.ZipFile": "(,4.3.32767]",
"System.IO.FileSystem": "(,4.3.32767]",
"System.IO.FileSystem.AccessControl": "(,4.4.32767]",
"System.IO.FileSystem.DriveInfo": "(,4.3.32767]",
"System.IO.FileSystem.Primitives": "(,4.3.32767]",
"System.IO.FileSystem.Watcher": "(,4.3.32767]",
"System.IO.IsolatedStorage": "(,4.3.32767]",
"System.IO.MemoryMappedFiles": "(,4.3.32767]",
"System.IO.Pipelines": "(,10.0.32767]",
"System.IO.Pipes": "(,4.3.32767]",
"System.IO.Pipes.AccessControl": "(,5.0.32767]",
"System.IO.UnmanagedMemoryStream": "(,4.3.32767]",
"System.Linq": "(,4.3.32767]",
"System.Linq.AsyncEnumerable": "(,10.0.32767]",
"System.Linq.Expressions": "(,4.3.32767]",
"System.Linq.Parallel": "(,4.3.32767]",
"System.Linq.Queryable": "(,4.3.32767]",
"System.Memory": "(,5.0.32767]",
"System.Net.Http": "(,4.3.32767]",
"System.Net.Http.Json": "(,10.0.32767]",
"System.Net.NameResolution": "(,4.3.32767]",
"System.Net.NetworkInformation": "(,4.3.32767]",
"System.Net.Ping": "(,4.3.32767]",
"System.Net.Primitives": "(,4.3.32767]",
"System.Net.Requests": "(,4.3.32767]",
"System.Net.Security": "(,4.3.32767]",
"System.Net.ServerSentEvents": "(,10.0.32767]",
"System.Net.Sockets": "(,4.3.32767]",
"System.Net.WebHeaderCollection": "(,4.3.32767]",
"System.Net.WebSockets": "(,4.3.32767]",
"System.Net.WebSockets.Client": "(,4.3.32767]",
"System.Numerics.Vectors": "(,5.0.32767]",
"System.ObjectModel": "(,4.3.32767]",
"System.Private.DataContractSerialization": "(,4.3.32767]",
"System.Private.Uri": "(,4.3.32767]",
"System.Reflection": "(,4.3.32767]",
"System.Reflection.DispatchProxy": "(,6.0.32767]",
"System.Reflection.Emit": "(,4.7.32767]",
"System.Reflection.Emit.ILGeneration": "(,4.7.32767]",
"System.Reflection.Emit.Lightweight": "(,4.7.32767]",
"System.Reflection.Extensions": "(,4.3.32767]",
"System.Reflection.Metadata": "(,10.0.32767]",
"System.Reflection.Primitives": "(,4.3.32767]",
"System.Reflection.TypeExtensions": "(,4.3.32767]",
"System.Resources.Reader": "(,4.3.32767]",
"System.Resources.ResourceManager": "(,4.3.32767]",
"System.Resources.Writer": "(,4.3.32767]",
"System.Runtime": "(,4.3.32767]",
"System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]",
"System.Runtime.CompilerServices.VisualC": "(,4.3.32767]",
"System.Runtime.Extensions": "(,4.3.32767]",
"System.Runtime.Handles": "(,4.3.32767]",
"System.Runtime.InteropServices": "(,4.3.32767]",
"System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]",
"System.Runtime.Loader": "(,4.3.32767]",
"System.Runtime.Numerics": "(,4.3.32767]",
"System.Runtime.Serialization.Formatters": "(,4.3.32767]",
"System.Runtime.Serialization.Json": "(,4.3.32767]",
"System.Runtime.Serialization.Primitives": "(,4.3.32767]",
"System.Runtime.Serialization.Xml": "(,4.3.32767]",
"System.Security.AccessControl": "(,6.0.32767]",
"System.Security.Claims": "(,4.3.32767]",
"System.Security.Cryptography.Algorithms": "(,4.3.32767]",
"System.Security.Cryptography.Cng": "(,5.0.32767]",
"System.Security.Cryptography.Csp": "(,4.3.32767]",
"System.Security.Cryptography.Encoding": "(,4.3.32767]",
"System.Security.Cryptography.OpenSsl": "(,5.0.32767]",
"System.Security.Cryptography.Primitives": "(,4.3.32767]",
"System.Security.Cryptography.X509Certificates": "(,4.3.32767]",
"System.Security.Principal": "(,4.3.32767]",
"System.Security.Principal.Windows": "(,5.0.32767]",
"System.Security.SecureString": "(,4.3.32767]",
"System.Text.Encoding": "(,4.3.32767]",
"System.Text.Encoding.CodePages": "(,10.0.32767]",
"System.Text.Encoding.Extensions": "(,4.3.32767]",
"System.Text.Encodings.Web": "(,10.0.32767]",
"System.Text.Json": "(,10.0.32767]",
"System.Text.RegularExpressions": "(,4.3.32767]",
"System.Threading": "(,4.3.32767]",
"System.Threading.AccessControl": "(,10.0.32767]",
"System.Threading.Channels": "(,10.0.32767]",
"System.Threading.Overlapped": "(,4.3.32767]",
"System.Threading.Tasks": "(,4.3.32767]",
"System.Threading.Tasks.Dataflow": "(,10.0.32767]",
"System.Threading.Tasks.Extensions": "(,5.0.32767]",
"System.Threading.Tasks.Parallel": "(,4.3.32767]",
"System.Threading.Thread": "(,4.3.32767]",
"System.Threading.ThreadPool": "(,4.3.32767]",
"System.Threading.Timer": "(,4.3.32767]",
"System.ValueTuple": "(,4.5.32767]",
"System.Xml.ReaderWriter": "(,4.3.32767]",
"System.Xml.XDocument": "(,4.3.32767]",
"System.Xml.XmlDocument": "(,4.3.32767]",
"System.Xml.XmlSerializer": "(,4.3.32767]",
"System.Xml.XPath": "(,4.3.32767]",
"System.Xml.XPath.XDocument": "(,5.0.32767]"
}
}
}
}
}
}

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\vpodberezsky\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\vpodberezsky\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.usersecrets\10.0.1\buildTransitive\net8.0\Microsoft.Extensions.Configuration.UserSecrets.props" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.usersecrets\10.0.1\buildTransitive\net8.0\Microsoft.Extensions.Configuration.UserSecrets.props')" />
</ImportGroup>
</Project>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.1\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.1\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\10.0.1\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\10.0.1\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.1\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.1\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.usersecrets\10.0.1\buildTransitive\net8.0\Microsoft.Extensions.Configuration.UserSecrets.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.usersecrets\10.0.1\buildTransitive\net8.0\Microsoft.Extensions.Configuration.UserSecrets.targets')" />
</ImportGroup>
</Project>

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]

View File

@@ -0,0 +1,23 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("DataProxyApp")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+ec07c6ab7d7580b6da915404fac2a3bb7bf06714")]
[assembly: System.Reflection.AssemblyProductAttribute("DataProxyApp")]
[assembly: System.Reflection.AssemblyTitleAttribute("DataProxyApp")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Создано классом WriteCodeFragment MSBuild.

View File

@@ -0,0 +1 @@
7ea1161164debc2b8d370689d26b7d0bd4d2206c25eb7ae2d896610f29cc8f8d

View File

@@ -0,0 +1,17 @@
is_global = true
build_property.TargetFramework = net10.0
build_property.TargetFrameworkIdentifier = .NETCoreApp
build_property.TargetFrameworkVersion = v10.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = DataProxyApp
build_property.ProjectDir = D:\!!!gitea\homeOn\HomeOnApp\Services\DataProxyApp\DataProxyApp\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 10.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1,8 @@
// <auto-generated/>
global using System;
global using System.Collections.Generic;
global using System.IO;
global using System.Linq;
global using System.Net.Http;
global using System.Threading;
global using System.Threading.Tasks;

Some files were not shown because too many files have changed in this diff Show More