Как использовать JSON-файл "POST url" на веб-сайте RoR? - PullRequest
0 голосов
/ 08 мая 2019

Я использую Ruby on Rails и Kibana для отображения визуализации на моем веб-сайте (Ruby2.6.0, Rails5.2.3, Kibana6.6.1). Используя Xpack-> Share-> Generate PDF / PNG, я нахожу 'copy POST url'. Я могу получить следующий JSON-файл из URL-адреса POST с помощью 'net / http', но как я могу использовать POST-URL / JSON-файл на моем веб-сайте RoR для загрузки PNG-файла в папку 'assets'?

JSON-файл, полученный с URL-адреса POST:

{'path': '/ api / reports / jobs / download / jvds4zs10qv79d0062b9cel6', 'job': {'id': 'jvds4zs10qv79d0062b9cel6', 'index': '.reporting-2019.05.05', 'type': 'esqueue', 'jobtype': 'PNG', 'create_by': False, 'payload': {'type': 'visualization', 'title': '[eCommerce] Sales by Gender','lativeUrl ': «/ Приложение / kibana # / визуализации / редактирования / ed8436b0-b88b-11e8-a6d9-e546fe2bba5f _g = (RefreshInterval: (пауза: т, значение: 0), время: (от: теперь-60d, режим: быстрый, чтобы: сейчас)) & _ а = (фильтры: (), связаны между собой:! е, запрос: (язык: Lucene, запрос: ''), uiState :(), визави: (Aggs: ((включено: т, ID: '1', Params :(), схема: метрика, тип: число), (включено: т, идентификатор: '2', Титулы: (поле: customer_gender, JSON: '', missingBucket: е, missingBucketLabel : Отсутствует, заказ: убывание, OrderBy: '1', otherBucket: е, otherBucketLabel: Другое, размер: 5), схема: сегмент, тип: условия)), Титулы: (addLegend: т, addTooltip: т, isDonut: т, метки: (last_level: т, показать: т, усечение: 100, значения: т), legendPosition: правый, тип: пирог), название: "% 5BeCommerce% 5D + продаж + на + Пол », тип: пирог))», «заголовки»: 'UxY4w6gCRwwLZyFkDX0ujVlANYq7ae5UuNJAN0GpbTOX7vw5aPuCuyr37nNcpz3vtA8kNVaL6Gacs24mPjZfwl4mB9xRKGA62CkCLo8Xz1amuIEthI + BtKPGo5QAk2k2 + 7zLvLgX3KouVvYdd61U5rLAvfjv4TydcpH9qJ4qrL5OELkzAJGrNdujtDLWaoy2Qj9YXbLnh7gSdI + lrNml6usZIh4pMzz8qdRo597iO / 4AeSJRa2JfAruyGB3zYInZRtMuCbA4f3ANvT2WeAn6lpiwThB993uEjwu4LBVUZuo2XL0TcB29YNNa9oMCUEhWjdJ1ase5VQdz8V2IOgecQ1W52V5JuVTvl9SkVvFWSBhXJg ==', 'browserTimezone': 'Европа / Цюрих', 'макет': {'размеры': {'height': 589.234375, 'width': 866}}, 'basePath': '', 'forceNow': «2019-05-07T12: 38: 12.768Z»}, «тайм-аут»: 120000, «max_attempts»: 3, 'priority': 10, 'browser_type': 'chromium'}}

Я пытаюсь использовать 'net/http', что я добавил в контроллер:

class MaisonController < ApplicationController

  require 'net/http'

  def require_post
    uri = URI.parse("http://localhost:5601/api/reporting/generate/png?jobParams=(browserTimezone:Europe%2FZurich,layout:(dimensions:(height:589.234375,width:866)),objectType:visualization,relativeUrl:%27%2Fapp%2Fkibana%23%2Fvisualize%2Fedit%2Fed8436b0-b88b-11e8-a6d9-e546fe2bba5f%3F_g%3D(refreshInterval:(pause:!!t,value:0),time:(from:now-60d,mode:quick,to:now))%26_a%3D(filters:!!(),linked:!!f,query:(language:lucene,query:!%27!%27),uiState:(),vis:(aggs:!!((enabled:!!t,id:!%271!%27,params:(),schema:metric,type:count),(enabled:!!t,id:!%272!%27,params:(field:customer_gender,json:!%27!%27,missingBucket:!!f,missingBucketLabel:Missing,order:desc,orderBy:!%271!%27,otherBucket:!!f,otherBucketLabel:Other,size:5),schema:segment,type:terms)),params:(addLegend:!!t,addTooltip:!!t,isDonut:!!t,labels:(last_level:!!t,show:!!t,truncate:100,values:!!t),legendPosition:right,type:pie),title:!%27%255BeCommerce%255D%2BSales%2Bby%2BGender!%27,type:pie))%27,title:%27%5BeCommerce%5D%20Sales%20by%20Gender%27)")
    http = Net::HTTP.new(uri.host,uri.port)

    request = Net::HTTP::Post.new(uri.request_uri)
    response = http.request(request)
    render :json => response.body
  end
end

Edit: Я пытаюсь использовать 'attachment_fu' gem для загрузки png-файла с вышеуказанным JSON-файлом. Измените код в контроллере на следующий код: класс MaisonController

require 'net/http'
require 'open-uri'

def require_post
    uri = URI.parse("http://localhost:5601/api/reporting/generate/png?jobParams=(browserTimezone:Europe%2FZurich,layout:(dimensions:(height:589.234375,width:866)),objectType:visualization,relativeUrl:%27%2Fapp%2Fkibana%23%2Fvisualize%2Fedit%2Fed8436b0-b88b-11e8-a6d9-e546fe2bba5f%3F_g%3D(refreshInterval:(pause:!!t,value:0),time:(from:now-60d,mode:quick,to:now))%26_a%3D(filters:!!(),linked:!!f,query:(language:lucene,query:!%27!%27),uiState:(),vis:(aggs:!!((enabled:!!t,id:!%271!%27,params:(),schema:metric,type:count),(enabled:!!t,id:!%272!%27,params:(field:customer_gender,json:!%27!%27,missingBucket:!!f,missingBucketLabel:Missing,order:desc,orderBy:!%271!%27,otherBucket:!!f,otherBucketLabel:Other,size:5),schema:segment,type:terms)),params:(addLegend:!!t,addTooltip:!!t,isDonut:!!t,labels:(last_level:!!t,show:!!t,truncate:100,values:!!t),legendPosition:right,type:pie),title:!%27%255BeCommerce%255D%2BSales%2Bby%2BGender!%27,type:pie))%27,title:%27%5BeCommerce%5D%20Sales%20by%20Gender%27)")
    http = Net::HTTP.new(uri.host,uri.port)

    request = Net::HTTP::Post.new(uri.request_uri)
    response = http.request(request)
    render :json => response.body

    http.start() { |http|
    tempfile = Tempfile.new('test.png')
    File.open(tempfile.path, 'w') do |f|
        f.write response.body
    end
    attachment = Attachment.new(:upload_data => LocalFile.new(tempfile.path))
    attachment.save
    }
end

Я получаю ошибку 'uninitialized constant MaisonController::Attachment'.

Ожидаемый результат: загрузите файл png в ресурсы, используя вышеуказанный файл JSON.

1 Ответ

0 голосов
/ 10 мая 2019

Я отвечу на свой вопрос о том, что я пробовал в своем проекте, и закрою этот вопрос.

Я получил 'copy POST url' в 'Kibana-> Visualization / Dashboard-> PDF / PNG'. Это почтовый URL. Я отправил запрос с этим URL на сервер kibana. Действие приведет к «ожиданию», «обработке» сервера kibana и созданию отчета. И я получу файл JSON обратно с сервера. В файле JSON есть важный идентификатор задания, например, «jvi53ajd21w09d006233kcvo». Я могу найти все исторические отчеты в «Управление-> Отчетность». Наконец, я использую сгенерированный URL 'http://localhost:5601/api/reporting/jobs/download/jvi53ajd21w09d006233kcvo' с командой' wget ', чтобы загрузить отчет в мою локальную папку.

Подобный ответ вы можете найти здесь: https://discuss.elastic.co/t/how-to-use-post-url-to-share-visualisation-in-my-website/179671/4

Надеюсь, мой ответ поможет тем, кто хочет использовать POST URL в Кибане.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...