As the owner of a small development shop, I deal one on one with all of my clients. Most of the time these are happy/pleasant exchanges. But then on occasion, (usually when I'm on vacation, in the middle of an 8 hour meeting, or somewhere that my access to the internet is severely hindered), I get an email/text/call from a client whose site is down. No matter which form of communication, these exchanges are always written with caps lock.
Any website developer can give you a laundry list of why a site may be down or is not responding. Traffic spikes, server malfunctions, power outages, hacking attempts, etc. But most website owners don't care why the site isn't responding. They just want it fixed. An hour ago.
So in an effort to minimize these unpleasant events, I looked for some website monitoring tools. There are many out there with lots of options. But none really fit my use case. Plus, none were built in Drupal :).
I have a client dashboard system where my clients manage their account. They can view site analytics, submit support tickets, pay invoices, etc. I wanted to be able to track website downtime and have it available to them. Not only would it be a plus for them, but it could help me identify if issues were isolated to their site, or affecting our entire infrastructure.Step In Pinger
Pinger is a simple module that leverages the Drupal Queue API, Cron, and drupal_http_request. In a nutshell, you tell pinger to monitor a handful of urls, and it will check each url when cron runs. Over and over again.
Elysia Cron is recommended to help manage cron settings, so you can have pinger_cron() running more frequently than other modules (plus it helps run the Queue).
Pinger saves each response as an entity (so the entity API can be leveraged). It records the http status code, the duration of the request, and the timestamp. Additionally, the information is exposed to views, so you can generate reports of outages, slow responses, etc.PingCheck.in
I decided to launch PingCheck.in as a hosted version of Pinger. The service will check your website (perform a HTTP GET request) every 5 or 10 minutes (depending on subscription), and send a message to up to 5 different email addresses when it received something other than a 200 OK status.
We have different size plans for different needs. The personal website plan is free. Forever. Additionally, we are offering a 6 month free trial of any paid plan with coupon code "drupal6".
Please test out and review the module yourselves, or signup for the service. Comments and feedback on both are greatly appreciated.CategoryDrupal PlanetComments Add new comment Your name Comment* About text formatsPlain text
- Web page addresses and e-mail addresses turn into links automatically.
- Lines and paragraphs break automatically.
- Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <h4> <h5> <h6>
Field collections are awesome, we all know that. When it comes to revisioning it starts to turn sour, go deeper and include workflow moderation and it really turns dark.
XDebug with PHPStorm can do step-debugging on remote sessions started from the command line on a remote machine. You just have to set up a couple of environment variables, map the remote code to the local code that PHPStorm has at its disposal, and tunnel the xdebug connection to your workstation.
Note: If you just want to debug a PHP script (or drush command) on the local machine, that's much easier. Just enter PHPStorm's Run/Debug configuration and create a new "PHP Script" configuration.Overview of Setup
- We'll create a PHPStorm project that contains all the code we want to debug on the remote machine. This can be done via source control with matching code, by mounting the remote directory to your local machine, or any way you want.
- Create a mapping from server side directories to PHPStorm-side code (A "Server" configuration in PHPStorm)
- Use environment variables on the remote machine to tell xdebug what to do with the debugging session
- Tunnel the Xdebug TCP connection if necessary.
- Make PHPStorm listen for a connection
- Create a breakpoint somewhere early in the execution path
- Run the command-line tool on the remote server.
- On the remote server install xdebug and set xdebug.remote_enable=1 In your xdebug.ini (or php.ini). For complete details see Remote Drupal/PHP Debugging with Xdebug and PHPStorm.
- Open your project/directory in PHPStorm; it must have exactly the same code as is deployed on the remote server. (You can optionally mount the remote source locally and open it in PHPStorm using sshfs or any other technique you want, see notes below.)
- If you're debugging drush, you probably need to copy it into your project (you don't have to add it to source control). PHPStorm is quite insistent that executing code must be found in the project.
- Create a debug configuration and a "Server" configuration in your project. The Server configuration is used to map code locations from the server to your PHPStorm code. Run->Edit Configurations, Create PHP Web App, Create a server, give the server a name. Click "Use path mappings" and configure the mappings from your project to the remote server's code. (See )
- If your remote server cannot directly create a tcp connection to your workstation, you'll have to tunnel port 9000 to your local machine. ssh -R 9000:localhost:9000 your_account@remote_server.example.com - For more details and debugging, see
- Click the "Listen for PHP Debug Connections" button in PHPStorm. I call this the "unconditional listen" button, because it makes PHPStorm listen on port 9000 and accept any incoming connection, no matter what the IDE key. See Remote Drupal/PHP Debugging with Xdebug and PHPStorm
- In PHPStorm, set a breakpoint somewhere that your PHP script is guaranteed to hit early in its execution. For example, if you're debugging most drush actions, you could put a breakpoint on the first line of drupal_bootstrap() in includes/bootstrap.inc.
- If the computer is not reachable from the server, you will need to tunnel the connection from the server to your workstation. ssh -R 9000:localhost:9000 firstname.lastname@example.org For more details and debugging, Remote Drupal/PHP Debugging with Xdebug and PHPStorm
- In your command-line shell session on the remote server set the environment variable XDEBUG_CONFIG. For example, export XDEBUG_CONFIG="idekey=PHPSTORM remote_host=172.16.1.1 remote_port=9000" (Note that port 9000 is the default both for xdebug and for PHPStorm.) If you're tunneling the connection then remote_host must be 127.0.0.1. If you're not tunneling, it must be the reachable IP address of the machine where PHPStorm is listening.
- export PHP_IDE_CONFIG="serverName=yourservername" - the serverName is the name of the "server" you configured in PHPStorm above, which does the mapping of remote to local paths.
- On the command line run the command you want to run. For example drush cc all or php /root/drush/drush.php status
- If all goes well you'll stop at the breakpoint. You can step-debug to your heart's content and see variables, etc.
- I've had the best luck actually copying drush into my codebase so that its mappings and Drupal's mappings can be in the same directory.
- Once you have the environment variables set you can either use the "drush" command (which must be in your path) or use "php /path/to/drush/drush.php" with your drush options. Make sure you're using the drush that's mapped as a part of your project.
- We set the xdebug.remote_host in the XDEBUG_CONFIG environment variable; it could also have been configured in the xdebug.ini as xdebug.remote_host=myworkstation.example.com. (Note that the default is "localhost", so if you're tunneling the connection you don't actually have to set it.)
- Full details about remote debugging on xdebug.org
- Debugging: Make sure that only PHPStorm is listening on port 9000. If something else (most notoriously php-fpm) is listening there, you'll have to sort it out. PHPStorm is happy to listen on another port, see the preferences, and you'll need to change your environment variable to something like export XDEBUG_CONFIG="idekey=PHPSTORM remote_host=172.16.1.1 remote_port=9999
- You may want to use sshfs or some other technique to mount the remote code to your local machine. sshfs email@example.com:~/drush /tmp/drush would mount the contents of drush in the remote home directory to /tmp/drush (which must already exist) on your local machine. It must be writeable for PHPStorm to work with it as a project, so you'll have to work that out.
- The article that taught me everything I know about this is Command-line xdebug on a remote server. Thanks!
Drupal has many well documented best practices, many of which we've covered here previously. From using Features to export all site configuration, to applying updates on a copy of the site instead of production, to using a modern responsive base theme, there is usually a tried & trusted process for most scenarios that can help keep sites stable, and editorial teams & visitors happy.
2013 has been a big year and there's so much to share that this is Part 2 in our ongoing series of highlights. (Did you miss Part 1? Read that first.)
This post is a long one, so grab your favorite beverage (or a shawarma) and join us when you're ready.Highlights from 2013
Drupal Job Fair & Employers Summit
In January, 2013, Droplabs held another Drupal job fair but this time also had its first Drupal Employers Summit. All the companies in the area who had ever hosted a Drupal meetup or other Drupal-related event, had sponsored any of the previous job fairs, or simply asked to attend, were invited.
Half a dozen companies were represented, including CivicActions, Exaltation of Larks, Filter Digital, Princess Cruises, Sensis Agency and Stauffer and they talked into the night about hiring strategies and challenges, the desired skills that candidates should have for various roles, and ideas on how to grow Drupal talent.
Relaunched as Greater Los Angeles Drupal
At our open governance meeting in April, 2013, we voted to rename our group from "Downtown Los Angeles Drupal" to "Greater Los Angeles Drupal" (or just "GLAD", for short). This made sense since our organizers now endeavor to serve the 5 counties in the Greater Los Angeles Area and not only the Downtown Los Angeles region, but the name change led to some debate and vexation from members of a nearby group.
Governance policy enacted after a year of work
GLAD is founded on the values of teamwork, transparency, accountability, and the sharing of assets and resources. Work began on a formal governance policy just 6 days after the group was approved on Drupal Groups, and grew to include definitions of roles, our own code of conduct and a procedure for how to manage and resolve conflicts.
As far as I know, GLAD is the first Drupal user group to draft and implement a governance policy like this that's separate from the Drupal Code of Conduct. Hopefully, this governance policy can serve as an example and help other groups decide whether if a similar policy would be a good fit for them.
GLADCamp 2013 postponed :(
As with the change of name to Greater Los Angeles Drupal, not all of our highlights from 2013 went smoothly. Originally planned as a 3-day megaconference for all things Drupal, our 2013 conference was supposed to be a successor to Drupal Design Camp LA but it fell through when contracts with the venue didn't materialize. This was terribly disappointing, but provided bittersweet lessons for our organizing team.
Module Develoment Boot Camp at Droplabs
In the summer, Droplabs started its free, community-led Module Development Boot Camp. With 12 weeks of drills, exercises and exams, all aimed at training PHP and Drupal programmers the skills they need to write Drupal modules, this is the first event of its kind as far as I know.
Droplabs named world’s “Top Drupal location”
With 62 events dedicated to Drupal, Droplabs was recognized by Drupical as the world's "top Drupal location" between the months of July, 2012, and July, 2013.
Drupal Watchdog magazines for everyone
Are you an an organizer of an open source group or event in Southern California? Would you like a box of Drupal Watchdog magazines to give to your members and attendees? Droplabs announced that it had a very large surplus of Watchdog magazines and that they're just giving them away. They're already making their way as far as San Diego for the upcoming SANDcamp conference.
OneDayCareer.org wins at Stanford
What started out as a barn raising to help attendees of the Module Development Boot Camp get hands-on experience with custom module development, Git, Features and team-based collaboration, the OneDayCareer.org team went on to win at the Technology Entrepreneurship Demo Day at Stanford University, beating out 20,000 other students!
Again, there is simply too much to cover in one post. See you next time in the last part of our series!Tags: Planet DrupalYear in Review
Worchestra: FaceShift - A reporting tool on top of Drupal to fetch any Facebook page's posts' insights
Any Facebook page admin will care to see how their posts are doing, what engagement is it driving and how much did it score from likes, comments, and shares.
If you have been using Facebook Insights heavily you would know that there are is a huge limit when you export Post Level Data (Maximum of 500), so if you use your page heavily you would have more than 500 posts a month.
FaceShift is a tool extract post level report (Post title, link, number of likes, comments, and shares) for each post for a selected month, for any given Facebook page whether it was yours or for a competitor, you simply select the date and the facebook page, and the report will be emailed to you (most likely to your spam folder) in an Excel downlable link.
Give it a try and leave me your feedback
At some point you will feel the need for a new cleaner website, so you build your new Drupal site with cleaner content types, and you want to migrate your old content to the new website.
Migrate module is the module for that, however, by itself you will not be able to do your migration, you have to build your migration classes on top of that module, so below are the migration steps.
We start with creating a new module that will depend on Migrate module.