Commit ff01ba54 authored by Russ Fish's avatar Russ Fish

hyperviewer application program

parent d736629e
0 clan 1 lan
1 CN-4 1 host
2 llan-4 1 lan
3 LN-119 1 host
3 LN-118 1 host
3 LN-115 1 host
3 LN-114 1 host
3 LN-117 1 host
3 LN-116 1 host
3 LN-111 1 host
3 LN-110 1 host
3 LN-113 1 host
3 LN-112 1 host
3 LN-106 1 host
3 LN-107 1 host
3 LN-122 1 host
3 LN-123 1 host
3 LN-108 1 host
3 LN-109 1 host
3 LN-120 1 host
3 LN-121 1 host
3 LN-104 1 host
3 LN-105 1 host
3 LN-102 1 host
3 LN-103 1 host
3 LN-100 1 host
3 LN-101 1 host
3 LN-124 1 host
1 CN-15 1 host
2 llan-15 1 lan
3 LN-393 1 host
3 LN-392 1 host
3 LN-391 1 host
3 LN-390 1 host
3 LN-379 1 host
3 LN-378 1 host
3 LN-395 1 host
3 LN-394 1 host
3 LN-375 1 host
3 LN-399 1 host
3 LN-376 1 host
3 LN-397 1 host
3 LN-396 1 host
3 LN-377 1 host
3 LN-384 1 host
3 LN-385 1 host
3 LN-386 1 host
3 LN-387 1 host
3 LN-380 1 host
3 LN-381 1 host
3 LN-382 1 host
3 LN-383 1 host
3 LN-388 1 host
3 LN-389 1 host
3 LN-398 1 host
1 CN-10 1 host
2 llan-10 1 lan
3 LN-274 1 host
3 LN-270 1 host
3 LN-271 1 host
3 LN-272 1 host
3 LN-273 1 host
3 LN-258 1 host
3 LN-259 1 host
3 LN-252 1 host
3 LN-253 1 host
3 LN-250 1 host
3 LN-251 1 host
3 LN-256 1 host
3 LN-257 1 host
3 LN-254 1 host
3 LN-255 1 host
3 LN-263 1 host
3 LN-262 1 host
3 LN-261 1 host
3 LN-260 1 host
3 LN-267 1 host
3 LN-266 1 host
3 LN-265 1 host
3 LN-264 1 host
3 LN-269 1 host
3 LN-268 1 host
1 CN-0 1 host
2 llan-0 1 lan
3 LN-9 1 host
3 LN-8 1 host
3 LN-5 1 host
3 LN-4 1 host
3 LN-7 1 host
3 LN-6 1 host
3 LN-1 1 host
3 LN-0 1 host
3 LN-3 1 host
3 LN-2 1 host
3 LN-19 1 host
3 LN-18 1 host
3 LN-15 1 host
3 LN-14 1 host
3 LN-17 1 host
3 LN-16 1 host
3 LN-11 1 host
3 LN-10 1 host
3 LN-13 1 host
3 LN-12 1 host
3 LN-24 1 host
3 LN-20 1 host
3 LN-21 1 host
3 LN-22 1 host
3 LN-23 1 host
1 CN-6 1 host
2 llan-6 1 lan
3 LN-168 1 host
3 LN-169 1 host
3 LN-164 1 host
3 LN-165 1 host
3 LN-166 1 host
3 LN-167 1 host
3 LN-160 1 host
3 LN-161 1 host
3 LN-162 1 host
3 LN-163 1 host
3 LN-173 1 host
3 LN-158 1 host
3 LN-151 1 host
3 LN-150 1 host
3 LN-153 1 host
3 LN-152 1 host
3 LN-155 1 host
3 LN-154 1 host
3 LN-157 1 host
3 LN-156 1 host
3 LN-159 1 host
3 LN-172 1 host
3 LN-171 1 host
3 LN-170 1 host
3 LN-174 1 host
1 CN-1 1 host
2 llan-1 1 lan
3 LN-39 1 host
3 LN-38 1 host
3 LN-33 1 host
3 LN-32 1 host
3 LN-31 1 host
3 LN-30 1 host
3 LN-37 1 host
3 LN-36 1 host
3 LN-35 1 host
3 LN-34 1 host
3 LN-42 1 host
3 LN-25 1 host
3 LN-40 1 host
3 LN-27 1 host
3 LN-46 1 host
3 LN-47 1 host
3 LN-44 1 host
3 LN-45 1 host
3 LN-48 1 host
3 LN-49 1 host
3 LN-28 1 host
3 LN-29 1 host
3 LN-43 1 host
3 LN-26 1 host
3 LN-41 1 host
1 CN-3 1 host
2 llan-3 1 lan
3 LN-79 1 host
3 LN-78 1 host
3 LN-77 1 host
3 LN-76 1 host
3 LN-75 1 host
3 LN-95 1 host
3 LN-94 1 host
3 LN-97 1 host
3 LN-96 1 host
3 LN-91 1 host
3 LN-90 1 host
3 LN-93 1 host
3 LN-92 1 host
3 LN-99 1 host
3 LN-98 1 host
3 LN-86 1 host
3 LN-87 1 host
3 LN-84 1 host
3 LN-85 1 host
3 LN-82 1 host
3 LN-83 1 host
3 LN-80 1 host
3 LN-81 1 host
3 LN-88 1 host
3 LN-89 1 host
1 CN-17 1 host
2 llan-17 1 lan
3 LN-429 1 host
3 LN-428 1 host
3 LN-449 1 host
3 LN-448 1 host
3 LN-447 1 host
3 LN-446 1 host
3 LN-445 1 host
3 LN-444 1 host
3 LN-425 1 host
3 LN-442 1 host
3 LN-441 1 host
3 LN-426 1 host
3 LN-438 1 host
3 LN-439 1 host
3 LN-443 1 host
3 LN-432 1 host
3 LN-433 1 host
3 LN-430 1 host
3 LN-431 1 host
3 LN-436 1 host
3 LN-437 1 host
3 LN-434 1 host
3 LN-435 1 host
3 LN-427 1 host
3 LN-440 1 host
1 CN-8 1 host
2 llan-8 1 lan
3 LN-205 1 host
3 LN-204 1 host
3 LN-207 1 host
3 LN-206 1 host
3 LN-201 1 host
3 LN-200 1 host
3 LN-203 1 host
3 LN-202 1 host
3 LN-224 1 host
3 LN-223 1 host
3 LN-208 1 host
3 LN-221 1 host
3 LN-220 1 host
3 LN-216 1 host
3 LN-217 1 host
3 LN-214 1 host
3 LN-215 1 host
3 LN-212 1 host
3 LN-213 1 host
3 LN-210 1 host
3 LN-211 1 host
3 LN-209 1 host
3 LN-218 1 host
3 LN-219 1 host
3 LN-222 1 host
1 CN-9 1 host
2 llan-9 1 lan
3 LN-249 1 host
3 LN-248 1 host
3 LN-229 1 host
3 LN-228 1 host
3 LN-227 1 host
3 LN-226 1 host
3 LN-243 1 host
3 LN-242 1 host
3 LN-245 1 host
3 LN-244 1 host
3 LN-247 1 host
3 LN-246 1 host
3 LN-241 1 host
3 LN-240 1 host
3 LN-225 1 host
3 LN-230 1 host
3 LN-231 1 host
3 LN-232 1 host
3 LN-233 1 host
3 LN-234 1 host
3 LN-235 1 host
3 LN-236 1 host
3 LN-237 1 host
3 LN-238 1 host
3 LN-239 1 host
1 CN-18 1 host
2 llan-18 1 lan
3 LN-465 1 host
3 LN-464 1 host
3 LN-467 1 host
3 LN-466 1 host
3 LN-461 1 host
3 LN-460 1 host
3 LN-463 1 host
3 LN-462 1 host
3 LN-469 1 host
3 LN-452 1 host
3 LN-472 1 host
3 LN-473 1 host
3 LN-456 1 host
3 LN-457 1 host
3 LN-450 1 host
3 LN-451 1 host
3 LN-474 1 host
3 LN-453 1 host
3 LN-454 1 host
3 LN-455 1 host
3 LN-470 1 host
3 LN-471 1 host
3 LN-458 1 host
3 LN-459 1 host
3 LN-468 1 host
1 CN-19 1 host
2 llan-19 1 lan
3 LN-498 1 host
3 LN-499 1 host
3 LN-494 1 host
3 LN-495 1 host
3 LN-496 1 host
3 LN-497 1 host
3 LN-490 1 host
3 LN-491 1 host
3 LN-492 1 host
3 LN-493 1 host
3 LN-476 1 host
3 LN-477 1 host
3 LN-475 1 host
3 LN-478 1 host
3 LN-479 1 host
3 LN-489 1 host
3 LN-488 1 host
3 LN-483 1 host
3 LN-482 1 host
3 LN-481 1 host
3 LN-480 1 host
3 LN-487 1 host
3 LN-486 1 host
3 LN-485 1 host
3 LN-484 1 host
1 CN-16 1 host
2 llan-16 1 lan
3 LN-421 1 host
3 LN-420 1 host
3 LN-423 1 host
3 LN-422 1 host
3 LN-424 1 host
3 LN-414 1 host
3 LN-415 1 host
3 LN-416 1 host
3 LN-417 1 host
3 LN-410 1 host
3 LN-411 1 host
3 LN-412 1 host
3 LN-413 1 host
3 LN-418 1 host
3 LN-419 1 host
3 LN-403 1 host
3 LN-402 1 host
3 LN-401 1 host
3 LN-400 1 host
3 LN-407 1 host
3 LN-406 1 host
3 LN-405 1 host
3 LN-404 1 host
3 LN-409 1 host
3 LN-408 1 host
1 CN-5 1 host
2 llan-5 1 lan
3 LN-142 1 host
3 LN-143 1 host
3 LN-140 1 host
3 LN-141 1 host
3 LN-146 1 host
3 LN-147 1 host
3 LN-144 1 host
3 LN-145 1 host
3 LN-148 1 host
3 LN-149 1 host
3 LN-128 1 host
3 LN-129 1 host
3 LN-125 1 host
3 LN-126 1 host
3 LN-127 1 host
3 LN-137 1 host
3 LN-136 1 host
3 LN-135 1 host
3 LN-134 1 host
3 LN-133 1 host
3 LN-132 1 host
3 LN-131 1 host
3 LN-130 1 host
3 LN-139 1 host
3 LN-138 1 host
1 CN-14 1 host
2 llan-14 1 lan
3 LN-374 1 host
3 LN-371 1 host
3 LN-370 1 host
3 LN-373 1 host
3 LN-372 1 host
3 LN-368 1 host
3 LN-369 1 host
3 LN-366 1 host
3 LN-367 1 host
3 LN-364 1 host
3 LN-365 1 host
3 LN-362 1 host
3 LN-363 1 host
3 LN-360 1 host
3 LN-361 1 host
3 LN-357 1 host
3 LN-356 1 host
3 LN-355 1 host
3 LN-354 1 host
3 LN-353 1 host
3 LN-352 1 host
3 LN-351 1 host
3 LN-350 1 host
3 LN-359 1 host
3 LN-358 1 host
1 CN-7 1 host
2 llan-7 1 lan
3 LN-195 1 host
3 LN-194 1 host
3 LN-197 1 host
3 LN-196 1 host
3 LN-191 1 host
3 LN-190 1 host
3 LN-193 1 host
3 LN-192 1 host
3 LN-199 1 host
3 LN-198 1 host
3 LN-186 1 host
3 LN-187 1 host
3 LN-184 1 host
3 LN-185 1 host
3 LN-182 1 host
3 LN-183 1 host
3 LN-180 1 host
3 LN-181 1 host
3 LN-188 1 host
3 LN-189 1 host
3 LN-179 1 host
3 LN-178 1 host
3 LN-177 1 host
3 LN-176 1 host
3 LN-175 1 host
1 CN-12 1 host
2 llan-12 1 lan
3 LN-322 1 host
3 LN-323 1 host
3 LN-320 1 host
3 LN-321 1 host
3 LN-308 1 host
3 LN-309 1 host
3 LN-324 1 host
3 LN-304 1 host
3 LN-305 1 host
3 LN-306 1 host
3 LN-307 1 host
3 LN-301 1 host
3 LN-302 1 host
3 LN-303 1 host
3 LN-300 1 host
3 LN-319 1 host
3 LN-318 1 host
3 LN-313 1 host
3 LN-312 1 host
3 LN-311 1 host
3 LN-310 1 host
3 LN-317 1 host
3 LN-316 1 host
3 LN-315 1 host
3 LN-314 1 host
1 CN-13 1 host
2 llan-13 1 lan
3 LN-326 1 host
3 LN-327 1 host
3 LN-325 1 host
3 LN-328 1 host
3 LN-329 1 host
3 LN-348 1 host
3 LN-349 1 host
3 LN-340 1 host
3 LN-341 1 host
3 LN-342 1 host
3 LN-343 1 host
3 LN-344 1 host
3 LN-345 1 host
3 LN-346 1 host
3 LN-347 1 host
3 LN-331 1 host
3 LN-330 1 host
3 LN-333 1 host
3 LN-332 1 host
3 LN-335 1 host
3 LN-334 1 host
3 LN-337 1 host
3 LN-336 1 host
3 LN-339 1 host
3 LN-338 1 host
1 CN-2 1 host
2 llan-2 1 lan
3 LN-51 1 host
3 LN-50 1 host
3 LN-53 1 host
3 LN-52 1 host
3 LN-55 1 host
3 LN-54 1 host
3 LN-57 1 host
3 LN-56 1 host
3 LN-59 1 host
3 LN-58 1 host
3 LN-74 1 host
3 LN-73 1 host
3 LN-72 1 host
3 LN-70 1 host
3 LN-71 1 host
3 LN-68 1 host
3 LN-69 1 host
3 LN-60 1 host
3 LN-61 1 host
3 LN-62 1 host
3 LN-63 1 host
3 LN-64 1 host
3 LN-65 1 host
3 LN-66 1 host
3 LN-67 1 host
1 CN-11 1 host
2 llan-11 1 lan
3 LN-275 1 host
3 LN-291 1 host
3 LN-276 1 host
3 LN-277 1 host
3 LN-298 1 host
3 LN-299 1 host
3 LN-296 1 host
3 LN-297 1 host
3 LN-294 1 host
3 LN-295 1 host
3 LN-292 1 host
3 LN-293 1 host
3 LN-290 1 host
3 LN-278 1 host
3 LN-279 1 host
3 LN-289 1 host
3 LN-288 1 host
3 LN-285 1 host
3 LN-284 1 host
3 LN-287 1 host
3 LN-286 1 host
3 LN-281 1 host
3 LN-280 1 host
3 LN-283 1 host
3 LN-282 1 host
# Makefile for the hyperviewer application directory. See ROADMAP for details.
# Tamara Munzner's Stanford HyperViewer code is in a subdirectory under here.
HVROOT = hypviewer
HVINC = ${HVROOT}/include
HVSRC = ${HVROOT}/src
# The follosing matches Munzner's Makefile scheme.
CPU = free
##CPU = linux
WINSYS = glut
##WINSYS = xt
ARCH = ${CPU}${WINSYS}
LIBRARY = hypviewer
HVLIBDIR = ${HVSRC}/${ARCH}
HVLIBNAME = ${LIBRARY}${ARCH}
HVLIB = ${HVLIBDIR}/lib${HVLIBNAME}.a
CFLAGS = -DHYPGLUT -DHYPFREE -DGL_GLEXT_LEGACY -g -DNAMESPACEHACK=
INCDIRS = -I${HVINC} -I/usr/X11R6/include -I/usr/local/include/python2.3
LDLIBS = ${HVLIB} -L/usr/X11R6/lib -lGLU -lGL -lXmu -lXext -lX11 -lm
# Distribute the Python scripts, shared library, and sample input files.
PYFILES = hypview.py exptToHv.py sshxmlrpc.py emulabclient.py hvFrameUI.py hv.py
DISTFILES = ${PYFILES} _hv.so BigLan.hyp ts600.hyp
# Finally, make something.
default: _hv.so
# The input for SWIG is in a .i file. Add stuff to the interface class .h file.
# How come %apply doesn't work for std::string in hv.mod? Workaround with sed instead.
hv.i: hv.mod ${HVINC}/HypView.h
sed -e 's/const string & [a-z][a-z]*/const std::string \& INPUT/g' \
${HVINC}/HypView.h | cat hv.mod - > hv.i
# Create the wrappers using SWIG.
hvmain.o: hvmain.cpp
g++ -fpic -c ${CFLAGS} ${INCDIRS} hvmain.cpp
_hv.cpp hv.py: hv.i
swig -c++ -python -DHYPGLUT -DHYPFREE -module hv -o _hv.cpp hv.i
# Put the wrappers in a shared library for import by hv.py .
_hv.o: _hv.cpp
g++ -fpic -c ${CFLAGS} ${INCDIRS} _hv.cpp
_hv.so: hvmain.o _hv.o ${HVLIB}
gcc -shared hvmain.o _hv.o ${LDLIBS} -o _hv.so
hvlib: ${HVLIB}
${HVLIB}:
@echo ""
@echo Make sure that Makefile.${ARCH} is included, and not commented-out.
grep Makefile.${ARCH} ${HVROOT}/Makefile.main
@echo ""
@echo Making ${HVLIB}
cd ${HVROOT}; make
dist:
# Wrap a top-level hyperviewer directory around the dist files in the tarball.
mkdir -p temp/hyperviewer
cp -p ${DISTFILES} temp/hyperviewer
tar cvfz hyperviewer.tgz -C temp hyperviewer
rm -r temp
clean:
rm *.o *.so
cd ${HVROOT}; make clean
\ No newline at end of file
ROADMAP for hyperviewer
Here's a sketch of the component architecture.
GUI *1 <- - - -> Client methods *2 <- - ssh to xmlrpc
wxGlade SWIG/HyperViewer *3 < Experiment topology from DB
wxPython | ssh to portstats/slothd
SWIG/wxWidgets | < Dynamic link/node info
wxGLCanvas |
X/OpenGL <- - - - - '
Files, by area in the diagram above:
*1 - Control panel GUI, created and modified graphically in the wxGlade designer.
hvgui.wxg - XML saved form of the GUI. Edit with wxGlade in this directory.
hvFrameUI.py - Generated by clicking "Generate code" on the properties page
of the top-level Application object.
*2 - Python client methods to glue everything together, read experiments from the database
and drive the SWIG'ed HyperViewer API.
hvApp.py - Application classes including hvframe, initialization and event bindings.
exptToHv.py - Get experiment topology via XML-RPC, write a HyperViewer .hyp file.
sshxmlrpc.py, emulabclient.py - Copied here for use by exptToHv.py .
(There must be a better way to package these files from testbed/xmlrpc.)
*3 - SWIG'ed HypView class which encapsulates the API to the HyperViewer library.
hvmain.cpp - Top level HyperViewer code, based on hypviewer/examples/*/main.cpp .
hv.mod - SWIG code appended to make hv.i, below.
hv.i - Input for SWIG, made from hypviewer/include/HypView.h + hv.mod .
hv.py - Python wrappers, generated by SWIG from hv.i, imported by hvApp.py .
_hv.cpp - C++ wrappers, generated by SWIG from hv.i .
_hv.so - Shared library, linked with libhyperviewer.a, imported by hv.py .
hypviewer - Tamara Munzner's HyperViewer library from Stanford.
(See http://graphics.stanford.edu/~munzner/software.html)
To compile, do "make clean", then "make".
. Makefile.main - This chooses which version is made, including Makefile.freeglut .
. Makefile.freeglut - The Makefile for FreeBSD with the GLUT library.
A proper SWIG binding needs to be ifdeff'ed in. Meanwhile this app is based
on the FreeBSD GLUT library API with all of the GLUT code ifdeffed out,
hence compile flags -DPyHack -DFONTHACK -DHYPGLUT -DHYPFREE.
. doc - HTML API documentation, see HypView.html .
. include - C++ Header files.
. src - C++ Library sources.
- src/freeglut - Where the .o files and libhypviewerfreeglut.a library are built.
. examples - C++ Test programs.
- examples/glut/freeglut/gluttest - Currently broken due to the -DPyHack ifdeffing.
Choose Makefile.freext in Makefile.main to get the following:
- examples/xtsimple/freext/xtsimple ../BigLan.hyp - Simple user interface.
- examples/vkxt/freext/vktest ../BigLan.hyp - UI with _many_ keystroke commands.
See /hypviewer/examples/vkxt/viewer.README for a description.
Choose Makefile.linuxxt in Makefile.main for Linux versions.
================================================================
Package dependencies:
. wxGlade-0.3.1_1 GUI builder for wxPython/wxWindows written in Python
wxgtk-common-2.4.2_1 The wxWidgets GUI toolkit (common files)
wxgtk2-2.4.2_3 The wxWidgets GUI toolkit (GTK2 version)
py23-wxPython-2.4.2.4_2 Python bindings for the wxWidgets/GTK GUI toolkit
- Documentation:
wxGlade tutorial - file:///usr/local/share/doc/wxGlade/tutorial.html
wxWindows 2.4.2 - http://www.wxwindows.org/manuals/2.4.2/wx.htm
PyOpenGL -- The Python OpenGL Binding - http://pyopengl.sourceforge.net/
wxGLCanvas - http://www.wxwindows.org/manuals/2.4.2/wx170.htm#wxglcanvas
. swig-1.3.21 Simplified Wrapper and Interface Generator
swig-doc-1.3.16 Simplified Wrapper and Interface Generator - Documentation
- Documentation:
Simplified Wrapper and Interface Generator - http://www.swig.org/
SWIG1.3 Documentation - file:///usr/local/share/doc/swig/Doc/Manual/index.html
Wrapping STL - http://www.geocities.com/foetsch/python/extending_python.htm#stl
This source diff could not be displayed because it is too large. You can view the blob instead.
#! /usr/bin/env python
#
# EMULAB-COPYRIGHT
# Copyright (c) 2004 University of Utah and the Flux Group.
# All rights reserved.
#
# Permission to use, copy, modify and distribute this software is hereby
# granted provided that (1) source code retains these copyright, permission,
# and disclaimer notices, and (2) redistributions including binaries
# reproduce the notices in supporting documentation.
#
# THE UNIVERSITY OF UTAH ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
# CONDITION. THE UNIVERSITY OF UTAH DISCLAIMS ANY LIABILITY OF ANY KIND
# FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
#
import sys
import socket
import os
import popen2
import getopt
import string
# Maximum size of an NS file that the server will accept.
MAXNSFILESIZE = (1024 * 512)
#
# This class defines a simple structure to return back to the caller.
# It includes a basic response code (success, failure, badargs, etc),
# as well as a return "value" which can be any valid datatype that can
# be represented in XML (int, string, hash, float, etc). You can also
# send back some output (a string with embedded newlines) to print out
# to the user.
#
# Note that XMLRPC does not actually return a "class" to the caller; It gets
# converted to a hashed array (Python Dictionary), but using a class gives
# us a ready made constructor.
#
RESPONSE_SUCCESS = 0
RESPONSE_BADARGS = 1
RESPONSE_ERROR = 2
RESPONSE_FORBIDDEN = 3
RESPONSE_BADVERSION = 4
RESPONSE_SERVERERROR = 5
RESPONSE_TOOBIG = 6
RESPONSE_REFUSED = 7 # Emulab is down, try again later.
class EmulabResponse:
def __init__(self, code, value=0, output=""):
self.code = code # A RESPONSE code
self.value = value # A return value; any valid XML type.
self.output = output # Pithy output to print
return
#
# Read an nsfile and return a single string.
#
def readnsfile(nsfilename, debug):
nsfilestr = ""
try:
fp = os.open(nsfilename, os.O_RDONLY)
while True:
str = os.read(fp, 1024)
if not str:
break
nsfilestr = nsfilestr + str
pass
os.close(fp)
except:
if debug:
print "%s:%s" % (sys.exc_type, sys.exc_value)
pass
print "batchexp: Cannot read NS file '" + nsfilename + "'"
return None
pass
return nsfilestr
# exptToHv - Get an experiment topology via xmlrpc, and write a HyperViewer .hyp file.