track searches that return no results

This commit is contained in:
r888888888
2016-02-02 16:25:14 -08:00
parent 16ea72df01
commit fe4cb7f3ba
9 changed files with 93 additions and 0 deletions

View File

@@ -99,6 +99,21 @@
return string.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
}
Danbooru.get_url_parameter = function(sParam) {
var sPageURL = decodeURIComponent(window.location.search.substring(1)),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : sParameterName[1];
}
}
};
String.prototype.hash = function() {
var hash = 5381, i = this.length;

View File

@@ -13,6 +13,10 @@ module Explore
@search_service = PopularSearchService.new(@date, params[:scale] || "day")
end
def missed_searches
@search_service = MissedSearchService.new
end
def intro
@presenter = IntroPresenter.new
render :layout => "blank"

View File

@@ -1,4 +1,13 @@
module PostsHelper
def missed_post_search_count_js
return nil unless Danbooru.config.enable_post_search_counts
session_id = session.id
digest = OpenSSL::Digest.new("sha256")
sig = OpenSSL::HMAC.hexdigest(digest, Danbooru.config.shared_remote_key, ",#{session_id}")
return render("posts/partials/index/missed_search_count", session_id: session_id, sig: sig)
end
def post_search_count_js
return nil unless Danbooru.config.enable_post_search_counts

View File

@@ -0,0 +1,22 @@
# queries reportbooru to find missed post searches
class MissedSearchService
def each_search(&block)
fetch_data.scan(/(.+?) (\d+)\.0\n/).each(&block)
end
def fetch_data
# Cache.get("ms", 1.minute) do
url = URI.parse("#{Danbooru.config.report_server}/missed_searches")
response = ""
Net::HTTP.start(url.host, url.port, :use_ssl => url.is_a?(URI::HTTPS)) do |http|
http.read_timeout = 1
http.request_get(url.request_uri) do |res|
if res.is_a?(Net::HTTPSuccess)
response = res.body
end
end
end
response
# end
end
end

View File

@@ -0,0 +1,28 @@
<div id="c-explore-posts">
<div id="a-index">
<h1>Missed Searches (past seven days)</h1>
<table class="striped" width="100%">
<thead>
<tr>
<th>Tags</th>
<th style="text-align: right;">Count</th>
</tr>
</thead>
<tbody>
<% @search_service.each_search do |tags, count| %>
<tr class="category-<%= Tag.category_for(tags) %>">
<td><%= link_to tags, posts_path(:tags => tags) %></td>
<td style="text-align: right;"><%= count.to_i %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
<%= render "posts/partials/common/secondary_links" %>
<% content_for(:page_title) do %>
Missed Searches - <%= Danbooru.config.app_name %>
<% end %>

View File

@@ -59,4 +59,5 @@
<% if @post_set.has_wiki? %>
<meta name="description" content="<%= @post_set.wiki_page.presenter.blurb %>"></meta>
<% end %>
<%= missed_post_search_count_js %>
<% end %>

View File

@@ -13,6 +13,7 @@
<% if params[:random] %>
<%= hidden_field_tag :random, params[:random] %>
<% end %>
<%= hidden_field_tag "ms", "1" %>
<%= submit_tag "Go", :name => nil %>
<% end %>
</section>

View File

@@ -0,0 +1,12 @@
<script type="text/javascript">
$(function() {
var tags = $("#tags").val();
if (Danbooru.get_url_parameter("ms") === "1" && tags && tags.length > 0 && $(".post-preview").size() < 10) {
$.post("<%= Danbooru.config.report_server %>/missed_searches", {
session_id: "<%= session_id %>",
tags: $("#tags").val(),
sig: "<%= sig %>"
});
}
});
</script>

View File

@@ -46,6 +46,7 @@ Rails.application.routes.draw do
collection do
get :popular
get :searches
get :missed_searches
get :hot
get :intro
end