class MasterController: def __init__(self, recv_queue, send_queue, total_workers): self.protocol = Protocol(recv_queue, send_queue, total_workers) def start(self): #self.protocol.start_connection(self.data_read) self.protocol.start_connection()
class Worker: def __init__(self, recv_queue, send_queue, status_queue, data_cluster_write, data_cluster_read): self.protocol = Protocol(recv_queue, send_queue, status_queue, data_cluster_write, data_cluster_read) self.results_per_date = {} def start(self): self.protocol.start_connection(self.data_read, self.process_results, self.load_data, self.reset_data, self.save_data) def data_read(self, date, result): if date not in self.results_per_date: self.results_per_date[date] = [0, 0] if result == "positivi": self.results_per_date[date][0] += 1 else: self.results_per_date[date][1] += 1 def process_results(self): self.protocol.send_data(self.results_per_date) def load_data(self, date_results): self.results_per_date = date_results def reset_data(self): self.results_per_date = {} def save_data(self): return self.results_per_date
class TopCitiesController: def __init__(self, recv_queue, send_queue, total_workers, status_queue, data_cluster_write, data_cluster_read): self.protocol = Protocol(recv_queue, send_queue, total_workers, status_queue, data_cluster_write, data_cluster_read) self.cities_data = {} def start(self): self.protocol.start_connection(self.data_read, self.process_results, self.load_data, self.reset_data, self.save_data) def data_read(self, cities_data): self.cities_data.update(cities_data) def process_results(self): top_cities = dict(Counter(self.cities_data).most_common(3)) self.protocol.send_data(top_cities) def load_data(self, cities_data): self.cities_data = cities_data def reset_data(self): self.cities_data = {} def save_data(self): return self.cities_data
class DateSorter: def __init__(self, recv_queue, send_queue, total_workers, status_queue, data_cluster_write, data_cluster_read): self.protocol = Protocol(recv_queue, send_queue, total_workers, status_queue, data_cluster_write, data_cluster_read) self.date_data = OrderedDict() def start(self): self.protocol.start_connection(self.data_read, self.process_results, self.load_data, self.reset_data, self.save_data) def data_read(self, data): self.date_data.update(sorted(data.items())) def process_results(self): self.protocol.send_data(self.date_data) def load_data(self, date_data): self.date_data = date_data def reset_data(self): self.date_data = OrderedDict() def save_data(self): return self.date_data
class Worker: def __init__(self, recv_queue, send_queue, status_queue, data_cluster_write, data_cluster_read): self.protocol = Protocol(recv_queue, send_queue, status_queue, data_cluster_write, data_cluster_read) self.positives_per_city = {} def start(self): self.protocol.start_connection(self.data_read, self.process_results, self.load_data, self.reset_data, self.save_data) def data_read(self, place): if place not in self.positives_per_city: self.positives_per_city[place] = 0 self.positives_per_city[place] += 1 print("Positive of {}".format(place)) def load_data(self, positives_per_city): self.positives_per_city = positives_per_city def reset_data(self): self.positives_per_city = {} def save_data(self): return self.positives_per_city def process_results(self): self.protocol.send_data(self.positives_per_city)
class SummaryController: def __init__(self, recv_queue, status_queue, data_cluster_write, data_cluster_read, coordinator_queue): self.protocol = Protocol(recv_queue, status_queue, data_cluster_write, data_cluster_read, coordinator_queue) self.top_cities = None self.date_data = None self.percentage = None def start(self): self.protocol.start_connection(self.top_cities_read, self.date_data_read, self.count_read, self.write_summary, self.load_data, self.reset_data, self.save_data) def top_cities_read(self, top_cities): self.top_cities = top_cities def date_data_read(self, date_data): self.date_data = date_data def count_read(self, percentage): if percentage.isdigit(): self.percentage = float(percentage) * 100 else: self.percentage = percentage def write_summary(self, conn_id): print("Starting to write file {}".format(FOLDER_WRITE + 'summary_' + conn_id + '.txt')) with open(FOLDER_WRITE + 'summary_' + conn_id + '.txt', 'w') as file: file.write("date - totale_positivi - totale_deceduti\n") for date in self.date_data: file.write(date + " - " + str(self.date_data[date][0]) + " - " + str(self.date_data[date][1]) + "\n") file.write("\nTop 3 cities - totale positivi\n") for place in self.top_cities: file.write(place + " - " + str(self.top_cities[place]) + "\n") file.write("\nPorcentuale Deceduti=") file.write(str(self.percentage) + "%") def load_data(self, data): self.top_cities = data[0] self.date_data = data[1] self.percentage = data[2] def reset_data(self): self.top_cities = None self.date_data = None self.percentage = None def save_data(self): return [self.top_cities, self.date_data, self.percentage]
class DateSorter: def __init__(self, recv_queue, send_queue, total_workers): self.protocol = Protocol(recv_queue, send_queue, total_workers) self.date_data = OrderedDict() def start(self): self.protocol.start_connection(self.data_read) self.process_results() def data_read(self, data): self.date_data.update(sorted(data.items())) def process_results(self): self.protocol.send_data(self.date_data)
class TopCitiesController: def __init__(self, recv_queue, send_queue, total_workers): self.protocol = Protocol(recv_queue, send_queue, total_workers) self.cities_data = {} self.top_cities = {} def start(self): self.protocol.start_connection(self.data_read) self.process_results() def data_read(self, data): self.cities_data.update(data) def process_results(self): self.top_cities = dict(Counter(self.cities_data).most_common(3)) self.protocol.send_data(self.top_cities)
class SummaryController: def __init__(self, recv_queue): self.protocol = Protocol(recv_queue) def start(self): self.protocol.start_connection( self.top_cities_read, self.date_data_read, self.count_read ) self.write_summary() def top_cities_read(self, top_cities): self.top_cities = top_cities def date_data_read(self, date_data): self.date_data = date_data def count_read(self, percentage): self.percentage = percentage * 100 def write_summary(self): with open(WRITE_FILE, 'w') as file: file.write("date - totale_positivi - totale_deceduti\n") for date in self.date_data: file.write( date + " - " + str(self.date_data[date][0]) + " - " + str(self.date_data[date][1]) + "\n" ) file.write("\nTop 3 cities - totale positivi\n") for place in self.top_cities: file.write( place + " - " + str(self.top_cities[place]) + "\n" ) file.write("\nPorcentuale Deceduti=") file.write(str(self.percentage) + "%")
class Worker: def __init__(self, recv_queue, send_queue, master_queue): self.protocol = Protocol(recv_queue, send_queue, master_queue) self.positives_per_city = {} def start(self): self.protocol.start_connection(self.data_read) self.process_results() def data_read(self, place): if place not in self.positives_per_city: self.positives_per_city[place] = 0 self.positives_per_city[place] += 1 def process_results(self): self.protocol.send_data(self.positives_per_city)
class Worker: def __init__(self, recv_queue, send_queue, status_queue, data_cluster_write, data_cluster_read): self.protocol = Protocol( recv_queue, send_queue, status_queue, data_cluster_write, data_cluster_read ) self.total_positivi = 0 self.total_deceduti = 0 def start(self): self.protocol.start_connection( self.data_read, self.process_results, self.load_data, self.reset_data, self.save_data ) def data_read(self, positivi, deceduti): self.total_positivi += int(positivi) self.total_deceduti += int(deceduti) def process_results(self): result = "Not possible" if self.total_positivi != 0: result = str(self.total_deceduti / self.total_positivi) self.protocol.send_data(result) def load_data(self, data): self.total_positivi = data[0] self.total_deceduti = data[1] def reset_data(self): self.total_positivi = 0 self.total_deceduti = 0 def save_data(self): return [self.total_positivi, self.total_deceduti]
class Worker: def __init__(self, recv_queue, send_queue): self.protocol = Protocol(recv_queue, send_queue) self.total_positivi = 0 self.total_deceduti = 0 def start(self): self.protocol.start_connection(self.data_read) self.process_results() def data_read(self, positivi, deceduti): self.total_positivi += positivi self.total_deceduti += deceduti def process_results(self): result = self.total_deceduti / self.total_positivi self.protocol.send_data(result)
class Worker: def __init__(self, recv_queue, send_queue, master_queue): self.protocol = Protocol(recv_queue, send_queue, master_queue) self.results_per_date = {} def start(self): self.protocol.start_connection(self.data_read) self.process_results() def data_read(self, date, result): if date not in self.results_per_date: self.results_per_date[date] = [0, 0] if result == "positivi": self.results_per_date[date][0] += 1 else: self.results_per_date[date][1] += 1 def process_results(self): self.protocol.send_data(self.results_per_date)