r1393 + TODO grand rewrite
authorDenis Ovsienko <infrastation@yandex.ru>
Sun, 16 Dec 2007 20:49:01 +0000 (20:49 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Sun, 16 Dec 2007 20:49:01 +0000 (20:49 +0000)
TODO

diff --git a/TODO b/TODO
index f0525d2fd0ed0bb73db2ff29af6f196b22c22a5d..d211a3c3a4532469ddeabd6c4218a6c8e7ed1d21 100644 (file)
--- a/TODO
+++ b/TODO
-- use printLog in assertion functions
-- use a separate flag for rail problems in RackObject
-- asset management
-- rack picture attachments
+The features marked with [UI] must have a configuration option accessible from
+the user inteface page, so that a user could disable them. The items tagged
+with [AD] come from Aaron's TODO list.
+
+***************************************
+***                                 ***
+***      MINOR FEATURES MISSING     ***
+***                                 ***
+***************************************
+
 - bulk address reservation
-- helper to find unused addresses when binding them from object page
-- reports page:
-  - connected objects w/o rackspace
-       - objects of certain types w/o asset tag
+       There should be a tab on the IP subnet page, which would allow to reserve/release multiple IP
+       addresses at once (and set/unset comment for all of them as well)
+
+- fix tabindex in editRanges() HTML code
+
+- Allow a user to sort racks in the row manually.
+
+- add reports
+       - connected objects w/o rackspace
+       - all objects of certain types w/o asset tag/common name
        - connected objects in distinct rack rows
        - last history entries
        - warranty expiration
-+ bug: can't view/click on remote side in port list, if remote side is nameless
-- bug: cannot update port 'e4/4', if port 'e 4/4' exists
-- use user ID instead of username where possible
-- check words usage before deletion from a chapter
-- bug: search function is called 4 times per 1 search (see functions.php)
-- bug: non-existent dictionary words result in empty selects. workaround: use left join
-- fixme: don't permit rack resize to cross non-free units
-- objects auto-constructor
-- CDP parser
-- object teams
+       - list of all object stickers
+       - orphaned stickers
+
+- helper to find unused addresses when binding them from object page
+
+- [UI] detect known MAC addresses
+       In the Live VLANs tab we dump the MAC address table retrieved from a switch as plain text.
+       We should test each MAC address against being stored in Ports table and generate links
+       to the object and port where appropriate.
+
+- Portless KVM switch trigger
+       For an empty KVM switch it would be convenient to fill in number of ports and submit once
+       to get necessary number of KVM ports created and numbered automatically.
+
+- Portless server trigger
+       For an empty server with no ports configured there should be rendered a tab, which would
+       allow running AutoPorts procedure manually.
+
+- IP addresses and NAT rules comments should be searchable
+
+- Terminating NAT rules are not listed on the IP address default tab.
+
+- Address type terminology is confusing.
+       Replace current regular/virtual/shared keywords with (hopefully) something more obvious,
+       e. g., connected, host-local and virtual.
+
+- Ignore masklen for IP addresses silently.
+       When adding an IP address or NAT rule, ignore optional trailing /xx to tolerate copy-pasted
+       data.   Ideally, the masklen first ought to be verified for equality to the masklen of
+       covering IP subnet.
+
+- [UI] When listing IP addresses for an object, don't repeat the same interface name each
+       time, generate a spanned header instead.
+
+- Rearrange dictionary pages so, that they become more usable for both reading and editing.
+
+- Live tabs should have own CSS class with a different color.
+
+- [UI] NATv4 tab should be shown only for certain object types or for objects, which already
+       have some NAT rules configured. Writing a trigger would do this most naturally.
+
+- User's records should be rendered differently from the stock ones, when viewing/editing
+       the dictionary.
+
+- Split KVM port type into more specific KVM-host and KVM-term, adjust PortCompat appropriately,
+       so that connecting 2 servers or 2 KVM switches to each other isn't possible any more. Port table
+       will have to be corrected automatically, at least for the servers.
+
+- [UI] When adding an object/multiple objects, consider checking DEFAULT_OBJECT_TYPE config
+       variable, and if it is set, render <SELECT> input pre-selected with that type.
+
+- When listing objects and their racks, show the latter with their row name.
+
+- If we have the only rack in the field, include it into the working copy silently to
+       save a click.
+
+- When editing the dictionary, it's necessary to bypass wiki link parsing and present the words
+       as they are, but in the viewing mode it's more expected to see the links rendered.
+
+- Show rackspace usage/problems percentage and objects/external cables count on Rack page
+       in the info portlet.
+
+- The "C>*" (network is broadcast) checkbox is always on by default, altough default value
+       should be       stored in a config option.
+
+- Sometimes it is important to know exact plug type of the console port, thus abstract
+       "async serial" has to be broken down into DB-9, DB-25 and RJ-45 records (mutually
+       interconnectable, hence people usually have necessary cables around).
+
+***************************************
+***                                 ***
+***         FEATURES MISSING        ***
+***                                 ***
+***************************************
+
+- password change page
+       There should be a new page under the Configuration, which would let a user to change password.
+
+- [UI] persistent working copy
+       Save the last set of active racks in the Rackspace tab for each user instead of presenting him
+       with the fewest racks possible. There may be a timeout to stop showing racks with no changes
+       done.
+
+- Per-user options.
+       This is going to happen sooner or later, especially after implementing at least half of the
+       current TODO list.
+
+- [UI] hide empty columns
+       When we render e. g. network ports portlet, some columns of the table could happen completely
+       empty. We might hide such columns.
+
+- [UI] combine IPv4 and NATv4 where possible
+       Right now we list NAT rules in a separate table, but the listing would be much more readable, if
+       each rule was showed in a subtree under its IP address of an object. All unmatched (without a
+       proper termination) NAT rules would be listed in the traditional way.
+
+- [UI] AutoPorts
+       Store a string in a config variable, which would describe for each object type, how many ports
+       of which types should RackTables create upon creating a new object. The first employment for
+       this feature would be to start add 1 KVM-host and 2 Ethernet ports to each server by default.
+
+- HTTP installer
+       As long as we list only INSERT queries in the install/init-*.sql files, it seems worth
+       implementing install.php. This would prevent new installations from having init-quth.sql below
+       the web document root as a side-effect.
+
+- Rack thumbs caching
+       It's not necessary to generate rack thumb PNGs based on the live data from DB. To speed up
+       rackspace rendering and keep the pictures up-to-date, the following approach should be used:
+       1. Extend Rack table with a BLOB column for the thumb cache (a filesystem cache wouldn't be
+               secure at all) and a "cache valid" flag.
+       2. Change render_rack_thumb.php to use valid cached data, if any, otherwise generate
+               the PNG bytestream for the user and cache it in DB.
+       3. Change all procedures, which result in thumb invalidation (rackspace allocation, object or
+               rack problem markup, rack design change), to reset cache for involved rack(s).
+
+- Introduce "multiplexer" and "KVM switch" object types and load the dictionary with relevant
+       models list. After this is done, rename "switch" object type into "network switch" for clarity.
+
+- Rewrite "properties" tab in the object page so, that the user don't have to use two different
+       forms to edit similar data (static and optional), so much more that they are rendered together
+       in the viewing tab.
+
+- Rack flipping
+       Implement horizontal and vertical rack flipping. Vertical flipping would just indicate, if the
+       user wants to see rack front facing right or left today (with all the hardware following the
+       rack flip). Horizontal flipping would mean, that the rack taxonomy implies the top unit to be
+       numbered #1 and this looks more like a permanent property. This way, we either don't allow
+       h.f. for a rack holding any stuff, or map unit numbers on the fly somehow to keep rackspace
+       records consistent. There should be some handling for the case of resizing a h.f.'ed rack, so
+       that existing stuff doesn't slide up (as the distance to U1 remains constant by default).
+
+- Indicate front side on the thumb picture somehow (given that horizontal flipping works).
+
+- All files, which are subject to be modified by user, must be moved into a dedicated directory
+       to make upgrades more painless and secure.
+
+- "Add multiple racks" tab.
+
 - colo customer page
-- racks custom sort order
-- better tabindex in editRanges() HTML code
-- add htaccess to gateways dir
+       Implement a special edition of object viewing page, which would:
+       1. either render the target object only, or hide the names of all other objects in the rack;
+       2. check, that the current user is explicitly listed as the owner of the object requested
+               (by a mean of special sticker);
+       3. render remote network devices and ports, but wouldn't allow clicking;
+       4. same for IP addresses.
+       The only and main purpose of this page would be to assist colocation service customers in
+       accessing their hardware on-site and performing maintenance.
+
+***************************************
+***                                 ***
+***      MAJOR FEATURES MISSING     ***
+***                                 ***
+***************************************
+
+- [AD] rack (picture) attachments
+       Implement "attachments" tab for racks and objects, which would allow attaching random files
+       and generate thumbnails for those of them, which seem to be picture files (like it is done
+       in JIRA).
+
+- Asset management
+       This is a long-awaited silver bullet, which would ease documenting the hardware with no
+       rackspace allocated. The solution would be to introduce "rooms" of an abstract capacity
+       and taxonomy, capable of containing the objects. An object then could be either rack-mounted
+       or placed into a room. By default all objects happen to belong to the "floor", which is
+       equivalent to the current "unmounted objects" list. A special room, "attic" could be used to
+       accept objects, which are considered deleted. Such objects would be excluded from all
+       views, lists, searches and reports, but still available directly from the attic.
+
+- "Live CDP" tab
+       Although simple to explain, not yet known how to implement feature. Having the port list
+       with remote switches configured, we could paste "sh cdp ne"/"sh fdp ne" output into a text
+       area, submit and expect some AI to point out all inconsistencies and probably adjust the
+       data in DB accoring to the field data. The only implementation requirement clear so far
+       is having some naming on procedural conventions across the organization.
+
+- Unified IP address tree
+       This feature would allow representing the whole IP address space as a tree. The idea
+       can be best illustrated by WordPress categories. First of all, we let IP addresses to
+       exist without a containing subnet. To be precise, we introduce subnet 0.0.0.0/0, which
+       contains the whole IPv4 space, and call it "root". Then we remove the constraint, which
+       prevented us from letting one IP prefix to contain another IP prefix. After that
+       we can present the whole address space as a tree, which can hold every possible IP address
+       on either one of branches or the root depending on which of the prefixes matched best for
+       each particular address. This will allow us to have branches, which will reflect not
+       only connected prefixes or routed networks, but any arbitrary super- or subnets.
+
+- Object hierarchy
+       Building a tree of IP subnets is only a metter of calculation. Building a tree of objects
+       requires only just a little more. Provide the root group, then allow a user to inherit
+       more groups from the root or any other group, and we have a tree similar to the one of
+       IP addresses. The current "objects" page has a list of object group types to the left,
+       it is nothing else, as what the object root tree should look initially.
+
+- Auto-constructor
+       This feature consists of some encoded intelligence combined with field data. For example,
+       if we render a brand new network switch, router or KVM switch, of which is known its
+       hardware model only, a trigger could fire, which would offer to create all that ports,
+       which are guaranteed to be present on this hardware. However, this mostly applies to
+       chassis models, whilst modular hardware requires a different approach. Usually the
+       information necessary to build up a modular device is its module list and one or more
+       "base MAC address"es. The only estimation I can give at the moment is that this code
+       will require a long and gradual implementation.
+
+- User groups
+       Granting the same permission to half of new users is sometimes a boring procedure.
+
+- More means of user authentication and authorization
+       LDAP/AD, of course.
+
+- Live PTR tab
+       Add a tab to the IP subnet page, which would list the back-resolved PTR DNS records for each
+       IP address. The user then should be able to mark, which records he wants to be updated from
+       the live data. To ease DNS maintenance, the IP addresses, which have both comment field set
+       and PTR record resolved, should be highlighted in the case strings differ. Should we allow
+       prefixes and suffixes for comment auto-assignment?
+
+- Pluggable ports support
+       To provide appropriate support for GBIC/SFP/X2/SmartSerial ports, the following logic should
+       be implemented:
+       1. Introduce generalized (empty) and all possible media modules as port types: {SFP-1000,
+               SFP-1000Base-SX, SFP-1000Base-LX...}, {GBIC-1000, GBIC-1000Base-T, GBIC-1000Base-SX,
+               GBIC-1000Base-LX...}
+       2. Allow an empty port belonging to one of such types to be switched into any other type of
+               the same group.
+       3. Adjust PortCompat to let any *-1000Base-SX to connect to *-1000Base-SX and so on.
+       Once the above is complete, a port w/o a module would indicate its module plug type and
+       couldn't be connected to anything. After the physical installation of some particular module
+       port type would had to be hanged to more specific L1 type. After that we could connect the
+       port to any other port with the same L1 carrier type. Due to the limited number of modules
+       or cables available connector type (LC, SC, FC) would still be encoded in the port type like
+       it is done now.
+
+- Data export and import
+       For backup purposes it is recommended to distinguish stock data from the data entered
+       by user and generate an SQL dump with the latter. And if we could correctly narrow down
+       the process to some rack(s), the resulting dump would be a good supplement for the hardware
+       transferred across different companies.
+
+***************************************
+***                                 ***
+***           KNOWN BUGS            ***
+***                                 ***
+***************************************
+
+- An object cannot be deleted.
+       This isn't considered a bug, because we still hope to implement the asset management
+       feature. Once this is done, there will be a special "room" to place deleted objects into.
+
+- php-snmp detection
+       We don't detect properly probable absence of php-snmp module. An appropriate message should be
+       shown in such case.
+
+- Cannot update port 'e4/4', if port 'e 4/4' exists.
+
+- A rack can be resized to lose allocated units.
+
+- A word can be deleted from a chapter, even if referenced by some stickers.
+
+- A chapter can be deleted from the dictionary, even if referenced by sticker map.
+
+- Gateways directory isn't protected with any .htaccess rules, exposing local modifications
+       (if any) to the scripts to any HTTP client.
+
+- Live VLANs gateway is known to work with FreeBSD sed only.
+
+- SNMP timeout isn't properly handled by SNMP data harvester.
+
+- renderRackObject() doesn't handle missing objects appropriately.
+
+- [AD] single quotes aren't displayed properly in field contents
+
+- Moving a rack into another row is currently broken.
+
+***************************************
+***                                 ***
+***           INTERNALS             ***
+***                                 ***
+***************************************
+
+- Use printLog() in assertion functions.
+
+- Use a separate flag for rail problems in RackObject.
+
+- Use user ID instead of username where possible.
+
+- Search function is called 4 times per 1 search (see functions.php).
+
+- renderIPRange() could use printRefsOfType()
+
+- Should getObjectAddressesAndNames() be replaced with getObjectAddresses()?
+
+- Check that ophandlers.php:addNewRange() employs assertions properly.
+
+- Clean up pagehandlers.php from pointless endless case constructs (most probably
+       with a help of new "tabhandler" navigation index).
+
+- Review init-dictbase.sql to wipe ghost references from AttributeMap to chapter_no.
+
+- Look if foreach(getPortTypes()) can be replaced with more standard printSelect()
+
+- Cast Rack.height column to unsigned 8-bit type (will break racks more than 255 units high).
+
+***************************************
+***                                 ***
+***          INFRASTRUCTURE         ***
+***                                 ***
+***************************************
+
+- The project misses a good logo; once we get and merge it, make the logo a link to the
+       project's website.
+
+- Publish commented screenshots on the main web-site, so people can understand what the
+       project is about.
+
+- The project needs a wikispace and a bug tracker; Trac seems to be the proper
+       solution for this, but with a tricky installation procedure. Anyway, we have to wait
+       till the new hosting server is ready to find out, which tools can be used for
+       documentation and       bug tracking.