Changeset 871 for trunk/Monitoring/Watch/repo-state
- Timestamp:
- 06/11/13 09:33:58 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Monitoring/Watch/repo-state
r866 r871 1 1 #!/usr/bin/env python 2 2 3 # --- ncurses sample 1 4 5 #import curses 6 #from curses import panel 7 # 8 #class Menu(object): 9 # 10 # def __init__(self, items, stdscreen): 11 # self.window = stdscreen.subwin(0,0) 12 # self.window.keypad(1) 13 # self.panel = panel.new_panel(self.window) 14 # self.panel.hide() 15 # panel.update_panels() 16 # 17 # self.position = 0 18 # self.items = items 19 # self.items.append(('exit','exit')) 20 # 21 # def navigate(self, n): 22 # self.position += n 23 # if self.position < 0: 24 # self.position = 0 25 # elif self.position >= len(self.items): 26 # self.position = len(self.items)-1 27 # 28 # def display(self): 29 # self.panel.top() 30 # self.panel.show() 31 # self.window.clear() 32 # 33 # 34 # while True: 35 # self.window.refresh() 36 # curses.doupdate() 37 # for index, item in enumerate(self.items): 38 # if index == self.position: 39 # mode = curses.A_REVERSE 40 # else: 41 # mode = curses.A_NORMAL 42 # 43 # msg = '%d. %s' % (index, item[0]) 44 # self.window.addstr(1+index, 1, msg, mode) 45 # 46 # key = self.window.getch() 47 # 48 # if key in [curses.KEY_ENTER, ord('\n')]: 49 # if self.position == len(self.items)-1: 50 # break 51 # else: 52 # self.items[self.position][1]() 53 # 54 # elif key == curses.KEY_UP: 55 # self.navigate(-1) 56 # 57 # elif key == curses.KEY_DOWN: 58 # self.navigate(1) 59 # 60 # self.window.clear() 61 # self.panel.hide() 62 # panel.update_panels() 63 # curses.doupdate() 64 # 65 # 66 #class MyApp(object): 67 # 68 # def __init__(self, stdscreen): 69 # self.screen = stdscreen 70 # curses.curs_set(0) 71 # 72 # submenu_items = [ 73 # ('beep', curses.beep), 74 # ('flash', curses.flash) 75 # ] 76 # submenu = Menu(submenu_items, self.screen) 77 # 78 # main_menu_items = [ 79 # ('beep', curses.beep), 80 # ('flash', curses.flash), 81 # ('submenu', submenu.display) 82 # ] 83 # main_menu = Menu(main_menu_items, self.screen) 84 # main_menu.display() 85 86 #if __name__ == '__main__': 87 # curses.wrapper(MyApp) 88 89 90 91 92 93 # --- ncurses sample 2 94 95 # Author: Nikolai Tschacher 96 # Date: 02.06.2013 97 # 98 #class BoxSelector: 99 # """ Originally designed for accman.py. 100 # Display options build from a list of strings in a (unix) terminal. 101 # The user can browser though the textboxes and select one with enter. 102 # """ 103 # 104 # def __init__(self, L): 105 # """ Create a BoxSelector object. 106 # L is a list of strings. Each string is used to build 107 # a textbox. 108 # """ 109 # self.L = L 110 # # Element parameters. Change them here. 111 # self.TEXTBOX_WIDTH = 50 112 # self.TEXTBOX_HEIGHT = 6 113 # 114 # self.PAD_WIDTH = 400 115 # self.PAD_HEIGHT = 10000 116 # 117 # def pick(self): 118 # """ Just run this when you want to spawn the selction process. """ 119 # self._init_curses() 120 # self._create_pad() 121 # 122 # windows = self._make_textboxes() 123 # picked = self._select_textbox(windows) 124 # 125 # self._end_curses() 126 # 127 # return picked 128 # 129 # def _init_curses(self): 130 # """ Inits the curses appliation """ 131 # # initscr() returns a window object representing the entire screen. 132 # self.stdscr = curses.initscr() 133 # # turn off automatic echoing of keys to the screen 134 # curses.noecho() 135 # # Enable non-blocking mode. Keys are read directly, without hitting enter. 136 # curses.cbreak() 137 # # Disable the mouse cursor. 138 # curses.curs_set(0) 139 # self.stdscr.keypad(1) 140 # # Enable colorous output. 141 # curses.start_color() 142 # curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_GREEN) 143 # curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLACK) 144 # self.stdscr.bkgd(curses.color_pair(2)) 145 # self.stdscr.refresh() 146 # 147 # def _end_curses(self): 148 # """ Terminates the curses application. """ 149 # curses.nocbreak() 150 # self.stdscr.keypad(0) 151 # curses.echo() 152 # curses.endwin() 153 # 154 # def _create_pad(self): 155 # """ Creates a big self.pad to place the textboxes in. """ 156 # self.pad = curses.newpad(self.PAD_HEIGHT, self.PAD_WIDTH) 157 # self.pad.box() 158 # 159 # def _make_textboxes(self): 160 # """ Build the textboxes in the pad center and put them in the 161 # horizontal middle of the pad. """ 162 # # Get the actual screensize. 163 # maxy, maxx = self.stdscr.getmaxyx() 164 # 165 # windows = [] 166 # i = 1 167 # for s in self.L: 168 # windows.append(self.pad.derwin(self.TEXTBOX_HEIGHT, 169 # self.TEXTBOX_WIDTH, i, self.PAD_WIDTH//2-self.TEXTBOX_WIDTH//2)) 170 # i += self.TEXTBOX_HEIGHT 171 # 172 # for k in range(len(windows)): 173 # windows[k].box() 174 # windows[k].addstr(4, 4, '0x{0:X} - {1}'.format(k, self.L[k])) 175 # 176 # return windows 177 # 178 # def _center_view(self, window): 179 # """ Centers and aligns the view according to the window argument given. 180 # Returns the (y, x) coordinates of the centered window. """ 181 # # The refresh() and noutrefresh() methods of a self.pad require 6 arguments 182 # # to specify the part of the self.pad to be displayed and the location on 183 # # the screen to be used for the display. The arguments are pminrow, 184 # # pmincol, sminrow, smincol, smaxrow, smaxcol; the p arguments refer 185 # # to the upper left corner of the self.pad region to be displayed and the 186 # # s arguments define a clipping box on the screen within which the 187 # # self.pad region is to be displayed. 188 # cy, cx = window.getbegyx() 189 # maxy, maxx = self.stdscr.getmaxyx() 190 # self.pad.refresh(cy, cx, 1, maxx//2 - self.TEXTBOX_WIDTH//2, maxy-1, maxx-1) 191 # return (cy, cx) 192 # 193 # def _select_textbox(self, windows): 194 # # See at the root textbox. 195 # topy, topx = self._center_view(windows[0]) 196 # 197 # current_selected = 0 198 # last = 1 199 # top_textbox = windows[0] 200 # 201 # while True: 202 # # Highligth the selected one, the last selected textbox should 203 # # become normal again. 204 # windows[current_selected].bkgd(curses.color_pair(1)) 205 # windows[last].bkgd(curses.color_pair(2)) 206 # 207 # # While the textbox can be displayed on the page with the current 208 # # top_textbox, don't alter the view. When this becomes impossible, 209 # # center the view to last displayable textbox on the previous view. 210 # maxy, maxx = self.stdscr.getmaxyx() 211 # cy, cx = windows[current_selected].getbegyx() 212 # 213 # # The current window is to far down. Switch the top textbox. 214 # if ((topy + maxy - self.TEXTBOX_HEIGHT) <= cy): 215 # top_textbox = windows[current_selected] 216 # 217 # # The current window is to far up. There is a better way though... 218 # if topy >= cy + self.TEXTBOX_HEIGHT: 219 # top_textbox = windows[current_selected] 220 # 221 # if last != current_selected: 222 # last = current_selected 223 # 224 # topy, topx = self._center_view(top_textbox) 225 # 226 # c = self.stdscr.getch() 227 # 228 # # Vim like KEY_UP/KEY_DOWN with j(DOWN) and k(UP). 229 # if c == ord('j'): 230 # if current_selected >= len(windows)-1: 231 # current_selected = 0 # wrap around. 232 # else: 233 # current_selected += 1 234 # elif c == ord('k'): 235 # if current_selected <= 0: 236 # current_selected = len(windows)-1 # wrap around. 237 # else: 238 # current_selected -= 1 239 # elif c == ord('q'): # Quit without selecting. 240 # break 241 # # At hitting enter, return the index of the selected list element. 242 # elif c == curses.KEY_ENTER or c == 10: 243 # return int(current_selected) 244 # 245 # 246 #if __name__ == '__main__': 247 # # As simple as that. 248 # L = [ 249 # 'I wish I was a wizard', 250 # 'Sometimes it all just makes sense', 251 # 'This string is here because I need it', 252 # 'Being or not being!', 253 # 'Python is worse then PHP ;)', 254 # 'a -> b <=> if a then b' 255 # ] 256 # 257 # choice = BoxSelector(L).pick() 258 # print('[+] Your choice was "{0}"'.format(L[choice])) 259 260 261 262 263 264 265 266 # --- ncurses sample 3 267 268 269 270 import sys 3 271 import curses 4 from curses import panel 5 6 class Menu(object): 7 8 def __init__(self, items, stdscreen): 9 self.window = stdscreen.subwin(0,0) 10 self.window.keypad(1) 11 self.panel = panel.new_panel(self.window) 12 self.panel.hide() 13 panel.update_panels() 14 15 self.position = 0 16 self.items = items 17 self.items.append(('exit','exit')) 18 19 def navigate(self, n): 20 self.position += n 21 if self.position < 0: 22 self.position = 0 23 elif self.position >= len(self.items): 24 self.position = len(self.items)-1 25 26 def display(self): 27 self.panel.top() 28 self.panel.show() 29 self.window.clear() 30 31 32 while True: 33 self.window.refresh() 34 curses.doupdate() 35 for index, item in enumerate(self.items): 36 if index == self.position: 37 mode = curses.A_REVERSE 38 else: 39 mode = curses.A_NORMAL 40 41 msg = '%d. %s' % (index, item[0]) 42 self.window.addstr(1+index, 1, msg, mode) 43 44 key = self.window.getch() 45 46 if key in [curses.KEY_ENTER, ord('\n')]: 47 if self.position == len(self.items)-1: 48 break 49 else: 50 self.items[self.position][1]() 51 52 elif key == curses.KEY_UP: 53 self.navigate(-1) 54 55 elif key == curses.KEY_DOWN: 56 self.navigate(1) 57 58 self.window.clear() 59 self.panel.hide() 60 panel.update_panels() 61 curses.doupdate() 62 63 64 class MyApp(object): 65 66 def __init__(self, stdscreen): 67 self.screen = stdscreen 68 curses.curs_set(0) 69 70 submenu_items = [ 71 ('beep', curses.beep), 72 ('flash', curses.flash) 73 ] 74 submenu = Menu(submenu_items, self.screen) 75 76 main_menu_items = [ 77 ('beep', curses.beep), 78 ('flash', curses.flash), 79 ('submenu', submenu.display) 80 ] 81 main_menu = Menu(main_menu_items, self.screen) 82 main_menu.display() 83 84 if __name__ == '__main__': 85 curses.wrapper(MyApp) 272 #import pprint 273 274 # line below is to include "smon" package in the search path 275 sys.path.append("/home/jripsl/snapshot/Monitoring") 276 277 from smon import repo_io 278 import smon.types 279 280 281 repo_io.init() # open DB connection 282 283 repo_io.populate_tables_with_sample() 284 285 simulations=repo_io.retrieve_simulations() 286 287 mylines = ["Line {0} ".format(id)*3 for id in range(1,11)] 288 289 290 def main(stdscr): 291 hlines = begin_y = begin_x = 5 ; wcols = 10 292 # calculate total content size 293 padhlines = len(mylines) 294 padwcols = 0 295 for line in mylines: 296 if len(line) > padwcols: padwcols = len(line) 297 padhlines += 2 ; padwcols += 2 # allow border 298 #stdscr.addstr("padhlines "+str(padhlines)+" padwcols "+str(padwcols)+"; ") 299 # both newpad and subpad are <class '_curses.curses window'>: 300 mypadn = curses.newpad(padhlines, padwcols) 301 mypads = stdscr.subpad(padhlines, padwcols, begin_y, begin_x+padwcols+4) 302 #stdscr.addstr(str(type(mypadn))+" "+str(type(mypads)) + "\n") 303 mypadn.scrollok(1) 304 mypadn.idlok(1) 305 mypads.scrollok(1) 306 mypads.idlok(1) 307 308 mypadn.border(0) # first ... 309 mypads.border(0) # ... border 310 311 for line in mylines: 312 mypadn.addstr(padhlines-1,1, line) 313 mypadn.scroll(1) 314 mypads.addstr(padhlines-1,1, line) 315 mypads.scroll(1) 316 317 mypadn.border(0) # second ... 318 mypads.border(0) # ... border 319 320 # refresh parent first, to render the texts on top 321 #~ stdscr.refresh() 322 323 # refresh the pads next 324 mypadn.refresh(0,0, begin_y,begin_x, begin_y+hlines, begin_x+padwcols) 325 mypads.refresh() 326 mypads.touchwin() 327 mypadn.touchwin() 328 stdscr.touchwin() # no real effect here 329 #stdscr.refresh() # not here! overwrites newpad! 330 mypadn.getch() 331 # even THIS command erases newpad! 332 # (unless stdscr.refresh() previously): 333 stdscr.getch() 334 335 curses.wrapper(main) 336 337 338 339 340 repo_io.free() # close DB connection 341 342 343 344 345 346 347 348 349 350 # --- urwid sample 1 351 352 #import urwid 353 # 354 #txt = urwid.Text(u"Hello World") 355 #fill = urwid.Filler(txt, 'top') 356 #loop = urwid.MainLoop(fill) 357 #loop.run() 358 359 360 # --- urwid sample 2 361 362 #import urwid 363 # 364 #def show_or_exit(key): 365 # if key in ('q', 'Q'): 366 # raise urwid.ExitMainLoop() 367 # txt.set_text(repr(key)) 368 # 369 #txt = urwid.Text(u"Hello World") 370 #fill = urwid.Filler(txt, 'top') 371 #loop = urwid.MainLoop(fill, unhandled_input=show_or_exit) 372 #loop.run() 373
Note: See TracChangeset
for help on using the changeset viewer.