Yeah, I'm glad we found the problem too... I wanted to crawl under my desk and die when it started falling apart. I just felt physically sick when all that work fell apart, but luckily it was a server problem and "easy" to resolve.
To answer your question on our virtualization setup: we have 10 "blade" servers with the newest AMD ref F Dual Proc, Dual Core; each with 16gb ram, and a boat load of hard-disk space (probably in excess of 1tb each, though I'm not certain the exact number). Additionally, we have a separate SQL server that is a slightly older machine, but it has dual-proc and 4gb+ of RAM, and a huge hard disk. Aside from all that, we have a file server with another several TB of space available and use that to map a "shared" drive for the different departments and branches in the CU to connect to for their various stuff... I've mapped part of that drive in and shared it as a subfolder in the portals directory (actually, now that I think about it, we have it shared TO the file server from the portals folder, not the other way around).
I'm not entirely certain how many virtual appliances we have running currently, but we have several older servers that we are migrating to be virtualized (I have 3 web servers for other applications that I can think of off the top of my head that I'll be migrating, not to mention I just migrated our old intranet from a physical server to a virtual server). I'm guessing we have between 10-20 servers currently virtualized, though the only one running DNN is the one I mentioned previously.
The VM appliance I have set up for DNN is running dual-proc w/2gb ram and I have allotted about 20gb to it (but the beauty with VM is I can increase that dynamically if I need to). The "OS" drive only has 8gb and is "fixed" in size, but we added secondary drive to the VM appliance that accounts for the other 12.
Now that we have got past the initial problems, the server is running blazingly fast. In fact, I have NEVER seen DNN go this fast before. My home "server" is a Celeron 2ghz with 1gb RAM and runs "fast"; I had DNN set up on a physical server here for staging my modules and that was even faster than my home setup... but this virtual one knocks it's pants off. We have a pretty sophisticated skin and lots of modules and it still loads so fast I barely see it flash by. Of course, it loads a little slower out in the branches because their connection to the corporate office is a tad slower and has some latency... I'm just barely outside the server room so I have little latency.
Now to move on to the custom modules... being a credit union (and a corporate entity at all), we had need for several very specialized modules to handle different items within the CU. I'll briefly list the ones I created and what they do, as well as include a list of a few that we've purchased to handle more "generic" tasks:
- User Directory/Import: we have all of our employee data in a 3rd party system but really don't want people to have to create their own logins, manage their own profiles, etc, not to mention DNN was very lacking in a "user directory" type function and import ability for users. I had previously written a module to do this in our former intranet, but went and upgraded it heavily, adding AJAX support and custom import file mapping (map columns in the file to different user or profile fields). Additionally, the user directory is heavily coupled with the profile fields and allows searching by first name, last name, "department", etc, shows employee photos, has a "clickable" employee hierarchy (so clicking my supervisor would show their record in addition to all their direct reports), and a "clickable" department hierarchy (so clicking my department would show EVERYBODY in my department). I know that smart-thinker has a user directory type thing, but it just didn't fit out needs... though his would be very good in an external setting.
- Auto-logon: most employees really don't want to know their own password for the intranet, let alone be required to do anything to get in. I could have implemented the active directory authentication built in to DNN, but I didn't care for what it did... first of all, we don't really want it to automatically synchronize roles, etc, nor do I want it to have the "domain/username" as their username. I have since seen posts that talk about how to remove that, but I had a very simple solution -- I turned off anonymous authentication on the IIS VD, turned on integrated authentication, and then use the code where I grab the current principal (AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); follow through and get the current one with (WindowsPrincipal)System.Threading.Thread.CurrentPrincipal; in that regard, I can pull the user name (which has the domain attached, but easily stripped). Long story short, I slap this module on a page and if you aren't already logged in, it pulls your windows authentication and then uses some code to log you in.
- Calendar/Events: Ok... so I've seen all sorts of modules out there that "almost" do what we needed... problem is, the people in HR and our training department had some very specific requests that weren't out there. I set up a calendar that has color coded categories and allows events to be created with 4 different "sign-up" types: 1) no signups; 2) signup self (auto); 3) signup self (manager approval); 4) manager signups only (manager can sign up self or their reports). On top of that, it has workflow where emails will shoot out to the manager when somebody who works for them signs up and gives them the opportunity to "kick" them (which is permanent, so an automatic one won't let them signup again), etc. Additionally, the events can track "custom" fields (each event can be assigned a set of custom data to track) and each event attendee will be exported in a CSV when/if the event organizer wants to. That list will include all custom data. The custom data alone made this a very valuable addition because at this point, we can track ANYTHING we want and use the events for anything, such as company parties, training classes, RSVP events, etc. This module was a real bugger, took me nearly 2 months to complete, but they are bursting at the seams with how "cool" it is.
- Insurance referral tracking: normally credit unions cannot operate with "profitable" type items (ie, insurance, etc)... but we have a "service organization" (and most credit unions do) that has to pay taxes on the services they offer. This one in particular sells insurance of all types and they needed a way to track referrals from the branches. I wrote a simple submission/tracking module for them that ties into a windows application previously created a couple years ago.
- Custom Menu: so having an autogenerated menu for site navigation is all fine and dandy when you only have 20 pages... but when you have 1000, not quite. I created a module that will allow you to define completely custom navigation within a module, complete with images and/or CSS, can be set as a tree, or a menu (horizontal or vertical). It merely wraps the ComponentArt menu control and I store all the information in the database and render at runtime. The intranet administrator absolutely loves this module more than any of the others I've done. I have plans on rewriting this on my own time at home and making it commerically available... we'll see when I find the time.
- NADA lookups: as a credit union, our branch personnel need to look up automobile values... we have some subscription with NADA and I wrote a module that wraps around that COM object and allows looking up values.
- Newsletter: we were previously using the Orizonti newsletter but it had several incomplete areas (such as BCC sending, async sending); I took their code as a template and rewrote it from the ground up... pretty much the same thing though.
- PDF poster: "submittable" PDFs send their data as XFDF data which is somewhat unusable in a "normal" situation... wrote a module to intercept the XFDF data and merge it back into the original PDF and then email it to the appropriate recipient. Most of the PDFs we were using have been made obsolete by purchasing the Enterprise Forms module (we only need the PDFs for things that require a paper trail).
- SEG Tracking: Credit Unions are limited by certain rules... we cannot operate on the same principle as banks and let anybody join... we either have to limit ourselves to a geographic area OR "select employee groups" (basically company sponsored membership). When this limitation was imposed on us, we chose the latter... we needed a way to track which companies are "members" of our CU and track the ratio of members vs total employees... that is what this is.
- Single Sign On: more appropriately is a "password vault". I allow the admin to set up new "sites" with any number of custom fields that the end user can then specify values for (typically username and password). It stores that in the database and encrypts it, then in the future whenever they click the link for that website, it will automatically post to the login page for that site and log them in. For the older employees who can't remember anything, this is great. Personally, I hate the idea of storing your passwords.
- HelpDesk/Project Management: yes, I know SigmaPro Draconis does this... but we already had one in place that I created for our former intranet that was very specific to our needs.... I converted it to DNN and people love it. We have helpdesk tickets that can be converted to longterm projects and vice versa, with custom reminder intervals, etc.
That's all she wrote... for now. I have about 5 more modules on my list that different departments are asking me to create. I didn't mention all the modules we have purchased for use, but I think we have 5-10 modules that we have purchased and are currently making use of.
Hope that was educational or something...