internal void ConstructLambdas(IDictionary <string, KeyValuePair <string, string> > metadata) { var lambdaOptions = new List <AirQualityLambdaOptions>(); lambdaOptions.Add(new AirQualityLambdaOptions { Name = Constants.DefaultAirQualityFeedProcessorLambdaName, Handler = Constants.DefaultAirQualityFeedProcessorLambdaHandler }); lambdaOptions.Add(new AirQualityLambdaOptions { Name = Constants.DefaultAirQualityTwitterPublisherLambdaName, Handler = Constants.DefaultAirQualityTwitterPublisherLambdaHandler }); // config for Lambda to gather information from WAQI's API var cities = new List <City>(); cities.Add(new City { Country = "mexico", Name = "jalisco", // guadalajara is also good Stations = new List <string>(new string[] { "oblatos", "aguilas" }) // these are good too {"vallarta", "tlaquepaque"}) }); var envVarsWaqiGetCityFeed = new List <KeyValuePair <string, string> >(); envVarsWaqiGetCityFeed.Add(new KeyValuePair <string, string>( EnvCitiesWithStations.EnvironmentKey, EnvCitiesWithStations.GetValueFromCities(cities))); envVarsWaqiGetCityFeed.Add(new KeyValuePair <string, string>(Constants.EnvWaqiTokenKey, "replace_this_value")); // add queueUrl as an environment variable envVarsWaqiGetCityFeed.Add(metadata[Constants.EnvCityFeedSqsUrl]); lambdaOptions.Add(new AirQualityLambdaOptions { Name = Constants.DefaultWaqiGetCityFeedLambdaName, Handler = Constants.DefaultWaqiGetCityFeedLambdaHandler, EnvironmentVariables = envVarsWaqiGetCityFeed }); // to reduce operational load lambdas within AirQuality project share roles and permissions // they should be managed by modifying Name, Handler and EnvVars. // TODO: Need to work on options for event actions that trigger these lambdas might change constructor lambdaOptions.ForEach(options => { CreateAirQualityLambda(options.Name, options.Handler, options.EnvironmentVariables); }); }
internal List <KeyValuePair <string, Function> > ConstructLambdas(IDictionary <string, KeyValuePair <string, string> > metadata) { var lambdaOptions = new List <AirQualityLambdaOptions>(); var envVarsFeedProcessor = new List <KeyValuePair <string, string> >(); envVarsFeedProcessor.Add(metadata[Constants.EnvCityFeedSqsUrl]); envVarsFeedProcessor.Add(metadata[Constants.EnvTwitterSNS]); envVarsFeedProcessor.Add(metadata[Constants.EnvAirQualityTable]); envVarsFeedProcessor.Add(metadata[Constants.EnvGeneralSNSTopic]); lambdaOptions.Add(new AirQualityLambdaOptions { Name = Constants.DefaultAirQualityFeedProcessorLambdaName, Handler = Constants.DefaultAirQualityFeedProcessorLambdaHandler, EnvironmentVariables = envVarsFeedProcessor }); var envVarsTwitterPublisher = new List <KeyValuePair <string, string> >(); envVarsTwitterPublisher.Add(metadata[Constants.EnvTwitterSNS]); envVarsTwitterPublisher.Add(metadata[Constants.EnvTwitterAPIKey]); envVarsTwitterPublisher.Add(metadata[Constants.EnvTwitterAPISecret]); envVarsTwitterPublisher.Add(metadata[Constants.EnvTwitterAccessToken]); envVarsTwitterPublisher.Add(metadata[Constants.EnvTwitterTokenSecret]); lambdaOptions.Add(new AirQualityLambdaOptions { Name = Constants.DefaultAirQualityTwitterPublisherLambdaName, Handler = Constants.DefaultAirQualityTwitterPublisherLambdaHandler, EnvironmentVariables = envVarsTwitterPublisher }); // config for Lambda to gather information from WAQI's API var cities = new List <City>(); // jsons where obtained manually using a Postman script cities.Add(JsonSerializer.Deserialize <City>("{\"Country\":\"mexico\",\"Name\":\"nuevo-leon\",\"Stations\":[\"san-nicolas\",\"s.-pedro\",\"obispado\",\"monterrey/universidad\",\"monterrey/cadereyta\",\"monterrey/pueblo-serena\"]}")); cities.Add(JsonSerializer.Deserialize <City>("{\"Country\":\"mexico\",\"Name\":\"mexico\",\"Stations\":[\"miguel-hidalgo\",\"gustavo-a.-madero\",\"uam-iztapalapa\",\"benito-juarez\",\"merced\",\"fes-aragon\",\"iztacalco\",\"hospital-general-de-mexico\",\"coyoacan\",\"san-juan-de-aragon\",\"camarones\"]}")); cities.Add(JsonSerializer.Deserialize <City>("{\"Country\":\"mexico\",\"Name\":\"mexico\",\"Stations\":[\"pedregal\",\"ajusco-medio\",\"santiago-acahualtepec\",\"tlalnepantla\",\"tlahuac\"]}")); cities.Add(JsonSerializer.Deserialize <City>("{\"Country\":\"mexico\",\"Name\":\"veracruz\",\"Stations\":[\"xalapa/stps\",\"minatitlan/tecnologico\",\"poza-rica/universidad-veracruzana\"]}")); cities.Add(JsonSerializer.Deserialize <City>("{\"Country\":\"mexico\",\"Name\":\"veracruz\",\"Stations\":[\"poza-rica/universidad-veracruzana\"]}")); cities.Add(JsonSerializer.Deserialize <City>("{\"Country\":\"mexico\",\"Name\":\"baja-california\",\"Stations\":[\"tijuana/laboratorio\"]}")); cities.Add(JsonSerializer.Deserialize <City>("{\"Country\":\"mexico\",\"Name\":\"guanajuato\",\"Stations\":[\"guanajuato/universidad-gto-sede-belen\",\"ciceg\",\"irapuato/bomberos\",\"t-21\",\"facultad-de-medicina\"]}")); cities.Add(JsonSerializer.Deserialize <City>("{\"Country\":\"mexico\",\"Name\":\"yucatan\",\"Stations\":[\"merida/sds01\",\"merida/seduma01\"]}")); cities.Add(JsonSerializer.Deserialize <City>("{\"Country\":\"mexico\",\"Name\":\"oaxaca\",\"Stations\":[\"casa-hogar\",\"cedart\"]}")); cities.Add(JsonSerializer.Deserialize <City>("{\"Country\":\"mexico\",\"Name\":\"guadalajara\",\"Stations\":[\"tlaquepaque\",\"miravalle\",\"vallarta\",\"las-pintas\",\"loma-dorada\"]}")); // manually added city cities.Add(new City { Country = "mexico", Name = "jalisco", // guadalajara is also good Stations = new List <string>(new string[] { "oblatos", "aguilas" }) }); var envVarsWaqiGetCityFeed = new List <KeyValuePair <string, string> >(); envVarsWaqiGetCityFeed.Add(new KeyValuePair <string, string>( EnvCitiesWithStations.EnvironmentKey, EnvCitiesWithStations.GetValueFromCities(cities))); envVarsWaqiGetCityFeed.Add(new KeyValuePair <string, string>(Constants.EnvWaqiTokenKey, System.Environment.GetEnvironmentVariable(Constants.EnvWaqiTokenKey))); // add queueUrl as an environment variable envVarsWaqiGetCityFeed.Add(metadata[Constants.EnvCityFeedSqsUrl]); envVarsWaqiGetCityFeed.Add(metadata[Constants.EnvAirQualityTable]); lambdaOptions.Add(new AirQualityLambdaOptions { Name = Constants.DefaultWaqiGetCityFeedLambdaName, Handler = Constants.DefaultWaqiGetCityFeedLambdaHandler, EnvironmentVariables = envVarsWaqiGetCityFeed }); // to reduce operational load lambdas within AirQuality project share roles and permissions // they should be managed by modifying Name, Handler and EnvVars. // TODO: Need to work on options for event actions that trigger these lambdas might change constructor var functionByName = from lambda in lambdaOptions let function = CreateAirQualityLambda(lambda.Name, lambda.Handler, lambda.EnvironmentVariables) group function by lambda.Name; return((from f in functionByName select KeyValuePair.Create <string, Function>(f.Key, f.FirstOrDefault())).ToList()); }