Пример #1
0
    def generate_plot():

        temp_num = rd_temp.dbsize(
        )  # Get the number of temperature dictionaries in database
        ''' Use the "random" module to randomly-generate a temp field to 
        develop a time-series line plot of from the list: "GALT", "GMAXLT", 
        and "GMINLT": '''

        temp_field_list = [
            "GALT (Celsius)", "GMAXLT (Celsius)", "GMINLT(Celsius)"
        ]
        temp_field = temp_field_list[random.randint(0, 2)]

        # Use matplolib to generate plot of time-series temperature data:

        time_array = numpy.array([])  # Initialize array to store time data
        temperature_array = numpy.array(
            [])  # Initialize array to store temperature data

        # Use for loop to append values to array storing time and temperature field values:

        for i in range(0, temp_num):

            temp_key = i  # Assign keyname to temperature
            time_array = numpy.append(time_array, i)
            temperature_array = numpy.append(
                temperature_array, float(rd_temp.hget(temp_key, temp_field)))

        # Use "Matplotlib" to generate a line plot of the time-series dataset:

        plt.plot(time_array, temperature_array)
        plt.title("Plot of " + temp_field +
                  " vs. Time (Months) Starting from 01/01/1930 ")
        plt.xlabel("Time (Months)")
        plt.ylabel(temp_field)
        plt.savefig('/Time-Series-Line-Plot.png')

        # Open image and add to redis database containing job information:

        with open('/Time-Series-Line-Plot.png', 'rb') as f:
            img = f.read()

        rd_jobs.hset(f'job.{jid}', "image",
                     img)  # Set the image in redis database

        return_status = "Plot Generated Successfully"

        return return_status
Пример #2
0
def update_data_api():
    
    temp_num = rd_temp.dbsize() # Get the number of temperature dictionaries in database 
    
    # Query the UUID for date with historical temperature value(s) to be updated: 
        
    UUID = request.args.get('UUID')
    
     # Get the temp_key from the database using UUID: 
        
    for i in range(0, temp_num ):
        
        UUID_rd = rd_temp.hget(i, "UUID")# Get the UUID from database
        
        ''' If UUID returned from database equals UUID query value, define
        "temp_key" value and break '''
        
        if (UUID_rd == UUID):
            
            # Assign keyname to temperature:
        
            temp_key = i
            
            break
    
    # Query the Global Average Land Temperature (GALT) in Celsius
    
    GALT_str = request.args.get('Global_Average_Land_Temp')
    
    # If "GALT_str" query value is defined update value in database:
    
    if (GALT_str != None):
        
        GALT = float(GALT_str)
        rd_temp.hset(temp_key, "GALT (Celsius)", GALT)
    
    # Query the Global Maximum Land Temperature (GMAXLT) in Celsius
    
    GMAXLT_str = request.args.get('Global_Maximum_Land_Temp')
    
     # If "GMAXLT_str" query value is defined update value in database:
        
    if (GMAXLT_str != None):
        
        GMAXLT = float(GMAXLT_str)
        rd_temp.hset(temp_key, "GMAXLT (Celsius)", GMAXLT)
    
    
    # Query the Global Minimum Land Temperature (GMINLT) in Celsius
    
    GMINLT_str = request.args.get('Global_Minimum_Land_Temp')
    
     # If "GMINLT_str" query value is defined update value in database:    
        
    if (GMINLT_str!= None):
        
        GMINLT = float(GMINLT_str)
        rd_temp.hset(temp_key, "GMINLT(Celsius)", GMINLT)

        
    return_status = "Data Updated Successfully"
    
    return return_status
Пример #3
0
def delete_data_api():
    
    temp_num = rd_temp.dbsize() # Get the number of temperature dictionaries in database 
    
    # Query the date bounds for historical temperature value(s) to be deleted: 
        
    date_low = request.args.get('date_lower_bound')
    date_up = request.args.get('date_upper_bound')
    
    
    ''' Extract date parameters from lower bound: '''
    
    year_low = int(date_low[6:10])
    month_low = int(date_low[0:2])
    day_low = int(date_low[3:5])
    
    ''' Extract date parameters from upper bound: '''
    
    year_up = int(date_up[6:10])
    month_up = int(date_up[0:2])
    day_up = int(date_up[3:5])
    
    
    temp_store = [] # Initialize list to store data outside range of deletion:
    
    # Use a for loop to return field values between start and end date:
        
    for i in range(0, temp_num):
        
        temp_key = i # Assign keyname to temperature
        
        ''' Extract the date parameters from the database: '''
        
        date_db = rd_temp.hget(temp_key, "dt")
        year_db = int(date_db[6:10])
        month_db = int(date_db[0:2])
        day_db = int(date_db[3:5])
        
        sto_cond = True # Initialize storage condition to true 
        
        ''' Use while loop with nested if statements to check if date from 
        database falls within range: '''
            
        while (sto_cond == True):
            
           if (year_db < year_up and year_db > year_low):
               
               sto_cond = False 
               break
           
           elif (year_db == year_up and month_db < month_up and month_db > month_low):
               
               sto_cond = False 
               break
           
           elif (year_db == year_low and month_db > month_low and month_db < month_up):
               
               sto_cond = False 
               break 
           
           elif (year_db == year_up and month_db ==  month_up and day_db < day_up and day_db > day_low):
               
               sto_cond = False 
               break 
           
           elif (year_db == year_low and month_db ==  month_low and day_db > day_low and day_db < day_up):
               
               sto_cond = False 
               break  
           
           break  
       
        ''' Append field values from database to data storage list if the condition 
           "sto_cond" is true: '''
            
        if (sto_cond == True):
            
              temp_store.append(rd_temp.hgetall(temp_key))
         
    temp_store_num = len(temp_store)
        
    rd_temp.flushall() # Clear all elements from the redis database                                                                                                                                                                             

    ''' Store new data structure in redis database: '''

    for i in range(0,temp_store_num):

        temp_key = i # Assign keyname to temperature                                             

        ''' Set data points that lie outside range of deletion to database: '''

        rd_temp.hmset(temp_key, {"dt": temp_store[i]["dt"], "GALT (Celsius)": \
                            temp_store[i]["GALT (Celsius)"], "GMAXLT (Celsius)": \
                                temp_store[i]["GMAXLT (Celsius)"], "GMINLT(Celsius)": \
                                    temp_store[i]["GMINLT(Celsius)"], "UUID": \
                                        temp_store[i]["UUID"]})


    return_status = "Temperature Data Deleted Successfully"
    
    return return_status
Пример #4
0
def retrieve_data_api():
    
    temp_num = rd_temp.dbsize() # Get the number of temperature dictionaries in database 
    
    # Query the dates for historical temperature value(s) to be created and stored: 
        
    date_low = request.args.get('date_lower_bound')
    date_up = request.args.get('date_upper_bound')
    
    
    ''' Extract date parameters from lower bound: '''
    
    year_low = int(date_low[6:10])
    month_low = int(date_low[0:2])
    day_low = int(date_low[3:5])
    
    ''' Extract date parameters from upper bound: '''
    
    year_up = int(date_up[6:10])
    month_up = int(date_up[0:2])
    day_up = int(date_up[3:5])
    
    
    temp_output = [] # Initialize list to store output data
    
    # Use a for loop to return field values between start and end date:
        
    for i in range(0, temp_num):
        
        temp_key = i # Assign keyname to temperature
        
        ''' Extract the date parameters from the database: '''
        
        date_db = rd_temp.hget(temp_key, "dt")
        year_db = int(date_db[6:10])
        month_db = int(date_db[0:2])
        day_db = int(date_db[3:5])
        
        out_cond = True # Initialize output condition to true 
        
        ''' Use while loop with nested if statements to check if date from 
        database falls within range: '''
            
        while (out_cond == True):
            
           if (year_db > year_up or year_db < year_low):
               
               out_cond = False 
               break
           
           elif (year_db == year_up and month_db > month_up):
               
               out_cond = False 
               break
           
           elif (year_db == year_low and month_db < month_low):
               
               out_cond = False 
               break 
           
           elif (year_db == year_up and month_db ==  month_up and day_db > day_up):
               
               out_cond = False 
               break 
           
           elif (year_db == year_low and month_db ==  month_low and day_db < day_low):
               
               out_cond = False 
               break  
            
           break
       
           ''' Append field values from database to output list if the condition 
           "out_cond" is true: '''
            
        if (out_cond == True):
            
             temp_output.append(rd_temp.hgetall(temp_key))
    
    # Store data in json formatted dictionary:
    
    temp_dict = {"Earth Surface Temperature Data": temp_output}
    
    return temp_dict
Пример #5
0
def create_data_api():
    
    temp_num = rd_temp.dbsize() # Get the number of temperature dictionaries in database 
    
    # Query the data for historical temperature value(s) to be created and stored: 
        
    date_in = request.args.get('date')
    
    # Query the Global Average Land Temperature (GALT) in Celsius
    
    GALT_str = request.args.get('Global_Average_Land_Temp')
    GALT = float(GALT_str)
    
    # Query the Global Maximum Land Temperature (GMAXLT) in Celsius
    
    GMAXLT_str = request.args.get('Global_Maximum_Land_Temp')
    GMAXLT = float(GMAXLT_str)
    
    # Query the Global Minimum Land Temperature (GMINLT) in Celsius
    
    GMINLT_str = request.args.get('Global_Minimum_Land_Temp')
    GMINLT = float(GMINLT_str)
    
    create_cond = True # Initialize data creation condition to true  
    
    for i in range(0,temp_num):
        
        
         ''' Return date parameters for "temp_key" from database: '''
         
         temp_key = i # Assign keyname to temperature
         date_db = rd_temp.hget(temp_key, "dt") # Return date for "temp_key"
         
         ''' Conditional to compare input date of creation to date in database: '''
        
         if (date_in == date_db):
                 
                 create_cond = False
                 break
         
         
    if (create_cond == True):
        
        temp_key = temp_num + 1
        
        # Set value of date "date_in" in database: 
            
        rd_temp.hset(temp_key, "dt", date_in)
  
        # Set value of GALT in database:
        
        rd_temp.hset(temp_key, "GALT (Celsius)", GALT)
            
        # Set value of GMAXLT in database:
            
        rd_temp.hset(temp_key, "GMAXLT (Celsius)", GMAXLT)
            
        # Set value of GMINLT in database:    
            
        rd_temp.hset(temp_key, "GMINLT(Celsius)", GMINLT)
        
        # Invoke "uuid4()" method to assign random unique identifier to temperature
        
        UUID = str(uuid.uuid4())
        
        rd_temp.hset(temp_key, "UUID", UUID)
            
        return_status = "Data Created and Stored Successfully"
    
    return return_status
Пример #6
0
        temp_key = i
        
        rd_temp.hmset(temp_key, {"dt": temp["dt"], "GALT (Celsius)": \
                            temp["GALT (Celsius)"], "GMAXLT (Celsius)": \
                                temp["GMAXLT (Celsius)"], "GMINLT(Celsius)": \
                                    temp["GMINLT(Celsius)"], "UUID": \
                                        UUID})
            
        i = i + 1    
    
    
    return_status = "Data Loaded Successfully"
    
    return return_status

temp_num = rd_temp.dbsize() # Get the number of temperature dictionaries in database   

''' Define endpoint that updates one or more temperature values 
for a particular date. The only requirements for the query parameters
are that the user must pass in the UUID for the appropriate data and at least 
one temperature value. The format for making a curl request to this route takes
on the following form: 
    
    "curl Flask_Service_IP:5000/update_data?UUID=<some_valid_UUID>&Global_Average_Land_Temp
    =<updated_avg_temp_value&Global_Maximum_Land_Temp=<updated_max_temp_value>'&Global_Minimum_Land_Temp=
    <updated_min_temp_value>" '''
    
''' NOTE: THE USER SHOULD KEEP IN MIND THAT THE TEMPERATURE VALUES ARE 
REPORTED IN DEGREES CELSIUS. THUS, TO AVOID ANY ANOMALIES IN THE TIME-SERIES
TEMPERATURE READINGS, MAKE SURE TO MAKE NECESSARY CONVERSIONS TO READ IN 
TEMPERATURE VALUES IN DEGREES CELSIUS'''