0) {
$percentage = number_format($cdn_file_count / $file_count * 100);
}
$avg_time = 0;
if ($file_count > 0) {
$avg_time = round($total_time * 1000 / $file_count, 3);
}
$output .= '
';
$items[] = t(
'Total number of files on this page: !file-count.',
array('!file-count' => $file_count)
);
$items[] = t(
'Number of files served from CDNs: !cdn-file-count
(!pct% coverage).',
array('!cdn-file-count' => $cdn_file_count, '!pct' => $percentage)
);
$items[] = t(
'Total time altering file URLs: !total ms, or !avg ms per file.',
array(
'!total' => round($total_time * 1000, 3),
'!avg' => $avg_time,
)
);
// Nested list of unsynced files.
if (count($unsynced_files)) {
$unsynced_items = array();
foreach ($unsynced_files as $file) {
$unsynced_items[] = theme('cdn_page_stats_file_link', array(
'file' => $file,
'absolute_path' => file_create_url($file),
'synced' => FALSE,
'cdn_url' => $file,
'server' => NULL,
));
}
$item = t('Files not served from the CDN:');
$item .= theme('item_list', array(
'items' => $unsynced_items,
'attributes' => array('class' => 'file-list'),
));
$items[] = $item;
}
// Nested list of synced files.
if (count($synced_files)) {
$synced_items = array();
foreach ($synced_files as $synced_file) {
$file = $synced_file['file'];
$cdn_url = $synced_file['cdn_url'];
$server = $synced_file['server'];
if (!isset($synced_items[$server])) {
$synced_items[$server] = array();
}
$synced_items[$server][] = theme('cdn_page_stats_file_link', array(
'file' => $file,
'absolute_path' => $synced_file['absolute path'],
'synced' => TRUE,
'cdn_url' => $cdn_url,
'server' => $server,
));
}
$synced_by_server = array();
foreach (array_keys($synced_items) as $server) {
$c = $synced_files_per_server_count[$server];
$item = t(
'!pct% of files served from %server (!count files):',
array(
'%server' => $server,
'!count' => $c,
'!pct' => number_format($c / $cdn_file_count * 100),
)
);
$item .= theme('item_list', array(
'items' => $synced_items[$server],
'attributes' => array('class' => 'file-list'),
));
$synced_by_server[] = $item;
}
$item = t('Files served from the CDN:');
$item .= theme('item_list', array('items' => $synced_by_server));
$items[] = $item;
}
$title = t('CDN integration statistics for %drupal_path', array(
'%drupal_path' => $_GET['q']
));
$output .= theme('item_list', array(
'items' => $items,
'title' => '' . $title . '',
));
$output .= '
';
return $output;
}
/**
* Render a file link in the CDN integration page statistics.
*
* @param $variables
* An associative array containing:
* - file: A string containing the Drupal path (i.e. path relative to the
* Drupal root directory) of the file to generate the URL for.
* - absolute_path: The absolute path (on the filesystem) to the file.
* - synced: Whether this file has been synced to the CDN or not.
* - cdn_url: The CDN URL of the file, or the normal URL when the file is
* not on a CDN.
* - server: The server on which the file resides.
* @return
* The rendered HTML.
*/
function theme_cdn_page_stats_file_link($variables) {
$file = $variables['file'];
$absolute_path = $variables['absolute_path'];
$synced = $variables['synced'];
$cdn_url = $variables['cdn_url'];
$server = $variables['server'];
$file_link = l(
t('!file', array('!file' => $file)),
$cdn_url,
array(
'external' => TRUE,
'attributes' => array('title' => $absolute_path),
)
);
$touch_link = l(
t('touch'),
'admin/cdn/touch/' . $file,
array('query' => drupal_get_destination())
);
$output = '';
$output .= '' . $file_link;
if ($synced) {
$output .= '';
$output .= '' . t('→') . '';
$output .= $touch_link;
$output .= '';
$output .= t('Touching this file will trigger a resync to the CDN.');
$output .= '';
$output .= '';
}
$output .= '';
return $output;
}