def main(self):
        #self.addForm('MAIN', KafkaManagerForm, name='KafkaManager')
        #npyscreen.setTheme(npyscreen.Themes.ElegantTheme)
        #npyscreen.setTheme(npyscreen.Themes.ColorfulTheme)

        self.keypress_timeout_default = 10
        self.monitor_window = MonitorWindowForm(parentApp=self,
                                                name="KafkaManager")

        max_y, max_x = self.monitor_window.curses_pad.getmaxyx()

        self.Y_SCALING_FACTOR = float(max_y) / 27
        self.X_SCALING_FACTOR = float(max_x) / 104

        self._init_consumer_groups_widget()

        self._init_helper_commands_widget()

        self.logger.debug("In window edit mode")
        self.monitor_window.edit()
        self.logger.info("Window mode exited")
    def main(self):
        #self.addForm('MAIN', KafkaManagerForm, name='KafkaManager')
        #npyscreen.setTheme(npyscreen.Themes.ElegantTheme)
        #npyscreen.setTheme(npyscreen.Themes.ColorfulTheme)

        self.keypress_timeout_default = 10
        self.monitor_window = MonitorWindowForm(parentApp=self, name="KafkaManager")


        max_y, max_x = self.monitor_window.curses_pad.getmaxyx()

        self.Y_SCALING_FACTOR = float(max_y)/27
        self.X_SCALING_FACTOR = float(max_x)/104

        self._init_consumer_groups_widget()

        self._init_helper_commands_widget()

        self.logger.debug("In window edit mode")
        self.monitor_window.edit()
        self.logger.info("Window mode exited")
class KafkaMonitor(npyscreen.NPSApp):

    def __init__(self, stop_event, logger=None):
        self.logger = logger
        if not self.logger:
            self.logger = logging.getLogger('KafkaMonitor')

        self.monitor_window = None
        self.update_worker = None
        self.stop_event = stop_event
        self.consumer_groups = None

    def while_waiting(self):
        self.logger.debug("While waiting called")
        self.logger.debug(self.update_worker)
        if not self.update_worker:
            self.logger.debug("Starting update worker")
            worker = WorkerThread(self.update_data, self.stop_event,
                    wait_interval=1)
            self.update_worker = worker
            self.update_worker.start()
            #self.update_worker.join()

    def update_data(self):
        self.logger.debug("Fetching and updating data")
        data = get_consumer_groups_offset_status(stop_event=self.stop_event)
        self.logger.debug("Retrieved data")
        self.logger.debug(data)
        self.consumer_groups.entry_widget.values = data
        self.consumer_groups.display()

    def main(self):
        #self.addForm('MAIN', KafkaManagerForm, name='KafkaManager')
        #npyscreen.setTheme(npyscreen.Themes.ElegantTheme)
        #npyscreen.setTheme(npyscreen.Themes.ColorfulTheme)

        self.keypress_timeout_default = 10
        self.monitor_window = MonitorWindowForm(parentApp=self, name="KafkaManager")


        max_y, max_x = self.monitor_window.curses_pad.getmaxyx()

        self.Y_SCALING_FACTOR = float(max_y)/27
        self.X_SCALING_FACTOR = float(max_x)/104

        self._init_consumer_groups_widget()

        self._init_helper_commands_widget()

        self.logger.debug("In window edit mode")
        self.monitor_window.edit()
        self.logger.info("Window mode exited")

    def _init_consumer_groups_widget(self):
        self.logger.info("Initializing consumer groups status display ")
        self.consumer_groups = self.monitor_window.add(MultiLineActionWidget,
                                                       name="Consumer Groups",
                                                       relx=1,
                                                        rely=2,
                                               max_height=int(23*self.Y_SCALING_FACTOR),
                                               max_width=int(100*self.X_SCALING_FACTOR)
                                               )

        self.consumer_groups.entry_widget.values = ["Retrieving data ..."]
        self.consumer_groups.entry_widget.scroll_exit = False


    def _init_helper_commands_widget(self):
        self.commands = self.monitor_window.add(npyscreen.FixedText,
                                        relx=1,
                                        rely=int(24*self.Y_SCALING_FACTOR),
                                        name="Commands"
                                       )
        self.commands.value = "^K : Kill  ^g : top    q : quit"
        self.commands.display()
        self.commands.editable = False
class KafkaMonitor(npyscreen.NPSApp):
    def __init__(self, stop_event, logger=None):
        self.logger = logger
        if not self.logger:
            self.logger = logging.getLogger('KafkaMonitor')

        self.monitor_window = None
        self.update_worker = None
        self.stop_event = stop_event
        self.consumer_groups = None

    def while_waiting(self):
        self.logger.debug("While waiting called")
        self.logger.debug(self.update_worker)
        if not self.update_worker:
            self.logger.debug("Starting update worker")
            worker = WorkerThread(self.update_data,
                                  self.stop_event,
                                  wait_interval=1)
            self.update_worker = worker
            self.update_worker.start()
            #self.update_worker.join()

    def update_data(self):
        self.logger.debug("Fetching and updating data")
        data = get_consumer_groups_offset_status(stop_event=self.stop_event)
        self.logger.debug("Retrieved data")
        self.logger.debug(data)
        self.consumer_groups.entry_widget.values = data
        self.consumer_groups.display()

    def main(self):
        #self.addForm('MAIN', KafkaManagerForm, name='KafkaManager')
        #npyscreen.setTheme(npyscreen.Themes.ElegantTheme)
        #npyscreen.setTheme(npyscreen.Themes.ColorfulTheme)

        self.keypress_timeout_default = 10
        self.monitor_window = MonitorWindowForm(parentApp=self,
                                                name="KafkaManager")

        max_y, max_x = self.monitor_window.curses_pad.getmaxyx()

        self.Y_SCALING_FACTOR = float(max_y) / 27
        self.X_SCALING_FACTOR = float(max_x) / 104

        self._init_consumer_groups_widget()

        self._init_helper_commands_widget()

        self.logger.debug("In window edit mode")
        self.monitor_window.edit()
        self.logger.info("Window mode exited")

    def _init_consumer_groups_widget(self):
        self.logger.info("Initializing consumer groups status display ")
        self.consumer_groups = self.monitor_window.add(
            MultiLineActionWidget,
            name="Consumer Groups",
            relx=1,
            rely=2,
            max_height=int(23 * self.Y_SCALING_FACTOR),
            max_width=int(100 * self.X_SCALING_FACTOR))

        self.consumer_groups.entry_widget.values = ["Retrieving data ..."]
        self.consumer_groups.entry_widget.scroll_exit = False

    def _init_helper_commands_widget(self):
        self.commands = self.monitor_window.add(
            npyscreen.FixedText,
            relx=1,
            rely=int(24 * self.Y_SCALING_FACTOR),
            name="Commands")
        self.commands.value = "^K : Kill  ^g : top    q : quit"
        self.commands.display()
        self.commands.editable = False