Ejemplo n.º 1
0
        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);
            });
        }
Ejemplo n.º 2
0
        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());
        }