This repository was archived by the owner on Jul 21, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOpenFiberFunction.cs
More file actions
111 lines (85 loc) · 3.98 KB
/
Copy pathOpenFiberFunction.cs
File metadata and controls
111 lines (85 loc) · 3.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using AngleSharp;
using Microsoft.Extensions.Options;
namespace AlexPagnotta.Function
{
public class OpenFiberFunction
{
private readonly Settings _settings;
private readonly SendGridSettings _sendGridSettings;
public OpenFiberFunction(
IOptionsMonitor<Settings> settings,
IOptionsMonitor<SendGridSettings> sendGridSettings
)
{
_settings = settings.CurrentValue;
_sendGridSettings = sendGridSettings.CurrentValue;
}
[FunctionName("OpenFiberFunction")]
public void Run([TimerTrigger("0 0 4 * * 1-5")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"Starting Open Fiber Function at: {DateTime.Now}");
//Get the coverage from the page
var coverageEnum = GetCoverageFromPageUrl(_settings.OpenFiberAddressUrl);
//Build email content
var emailContent = BuildEmail(_settings.OpenFiberAddress, coverageEnum);
//Send the email with SendGrid
var emailSender = new EmailSender(
_sendGridSettings.API_KEY,
_sendGridSettings.Sender,
_sendGridSettings.Recipient
);
emailSender.SendEmail(emailContent.subject, emailContent.content).GetAwaiter().GetResult();
}
public CoverageEnum GetCoverageFromPageUrl(string pageUrl) {
// Angle Sharp Config
// Load default configuration and open context
var config = Configuration.Default.WithDefaultLoader();
var context = BrowsingContext.New(config);
// Parse the page by Url in a document
var document = context.OpenAsync(pageUrl).Result;
//Get elements from the page, and the coverage string
var coverageElementParent = document.QuerySelector(_settings.ParentElementIdentifier);
var coverageStringElement = coverageElementParent.QuerySelector(_settings.CoverageStringElementIdentifier);
var coverageString = coverageStringElement.InnerHtml;
//Define and assign the type of coverage
CoverageEnum coverageEnum;
if(coverageString == _settings.FTTHCoverageStringIdentifier){
coverageEnum = CoverageEnum.FTTH;
}
else if(coverageString == _settings.FWACoverageStringIdentifier){
coverageEnum = CoverageEnum.FWA;
}
else if(coverageString == _settings.NOCoverageStringIdentifier){
coverageEnum = CoverageEnum.NoCoverage;
}
else{
throw new Exception($"The string {coverageString} is not expected, and it's not possible to identify the coverage.");
}
return coverageEnum;
}
public (string subject, string content) BuildEmail(string openFiberAddress, CoverageEnum coverageEnum){
//Define subjec and content based on the coverage enum
var subject = "";
var content = "";
switch (coverageEnum)
{
case CoverageEnum.FTTH:
subject = "Sei connesso in FTTH!";
content = $"Il tuo indirizzo {openFiberAddress} è connesso in FTTH!";
break;
case CoverageEnum.FWA:
subject = "Sei connesso in FWA.";
content = $"Il tuo indirizzo {openFiberAddress} è connesso in FWA!";
break;
case CoverageEnum.NoCoverage:
subject = "Mi dispiace, non sei connesso...";
content = $"Il tuo indirizzo {openFiberAddress} non è ancora coperto!";
break;
}
return (subject, content);
}
}
}