qgis server e projectos no pgsql - cache?

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

qgis server e projectos no pgsql - cache?

duartecarreira
Olá mais uma vez pessoal!

Ando aqui às voltas com o qgis server e estou muito bem impressionado!!

A dúvida é: tendo um projecto em pgsql servido pelo qgis server, estou a ver
sempre o mesmo mapa, mesmo quando altero o projecto e volto a gravar.

Parece haver aqui uma cache no meio... para ver o mapa uso o browser
diretamente, com um url getmap construído à mão. A cache do browser está
off. É enviado o header Cache-Control: no-cache.

Sabem o que se pode estar a passar? O cap doc tb não é actualizado... Posso
adicionar um layer novo, gravar o projecto, e o cap docs não o vai incluir
num request novo.

Se fizer reload ao apache (estou a usar mod_fcgi), já aparece o projecto
correctamente...

Eu li algures que o qgis ou o qgis server fazem cache do cap doc. Se o qgis
server faz isto tb, não vejo como possa ultrapassar este problema... a não
ser desistir de projectos em bd.


Abr,
Duarte



--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html
_______________________________________________
QGIS-pt mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-pt
Reply | Threaded
Open this post in threaded view
|

Re: qgis server e projectos no pgsql - cache?

Giovanni Manghi
Olá Duarte,

QGIS_SERVER_CACHE_SIZE ?

https://docs.qgis.org/testing/en/docs/user_manual/working_with_ogc/server/config.html#environment-variables


ab

-- G --


On Tue, Jun 16, 2020 at 5:45 PM duartecarreira <[hidden email]> wrote:

>
> Olá mais uma vez pessoal!
>
> Ando aqui às voltas com o qgis server e estou muito bem impressionado!!
>
> A dúvida é: tendo um projecto em pgsql servido pelo qgis server, estou a ver
> sempre o mesmo mapa, mesmo quando altero o projecto e volto a gravar.
>
> Parece haver aqui uma cache no meio... para ver o mapa uso o browser
> diretamente, com um url getmap construído à mão. A cache do browser está
> off. É enviado o header Cache-Control: no-cache.
>
> Sabem o que se pode estar a passar? O cap doc tb não é actualizado... Posso
> adicionar um layer novo, gravar o projecto, e o cap docs não o vai incluir
> num request novo.
>
> Se fizer reload ao apache (estou a usar mod_fcgi), já aparece o projecto
> correctamente...
>
> Eu li algures que o qgis ou o qgis server fazem cache do cap doc. Se o qgis
> server faz isto tb, não vejo como possa ultrapassar este problema... a não
> ser desistir de projectos em bd.
>
>
> Abr,
> Duarte
>
>
>
> --
> Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html
> _______________________________________________
> QGIS-pt mailing list
> [hidden email]
> https://lists.osgeo.org/mailman/listinfo/qgis-pt
_______________________________________________
QGIS-pt mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-pt
Reply | Threaded
Open this post in threaded view
|

Re: qgis server e projectos no pgsql - cache?

Jorge Gustavo Rocha-3
In reply to this post by duartecarreira

Olá Duarte,

Os projetos em base de dados têm que ter um tratamento ligeiramente diferente. Porquê? Porque não há o mecanismo de inotify quando um projeto é alterado. Ou seja, o QGIS Server sabe, para os projetos em ficheiro, quando o mesmo é alterado. Nestes casos, o QGIS Server pode reler o projeto e atualizar a cache do projeto.

Com os projetos em base de dados o QGIS Server não é notificado quando são alterados. Por isso, uma forma de o QGIS Server reler o projeto é, como fizeste, fazer o restart ao Apache manualmente.

Eu sou fã de guardar os projetos em base de dados, em ambientes empresariais/multi-utilizador. Nestes casos, o que faço, é por um trigger na(s) tabela(s) dos projetos QGIS que me envia uma notificação sempre que um projeto é criado, alterado ou removido. Em Python, recebo essa notificação e faço as ações decorrentes de cada uma destas coisas.

O trigger em si, é simples e pode ser algo do género:

create trigger project_change_qgis_projects
    after insert or delete or update on public.qgis_projects
    for each row
        execute procedure project_change();

A função que é executado é que envia a notificação:

CREATE OR REPLACE FUNCTION public.project_change() RETURNS trigger LANGUAGE plpgsql AS $$
declare
    pname varchar;
    rec record;
begin
    if (TG_OP = 'DELETE') then
        pname = old.name;
        rec = old;
    else
        pname = new.name;
        rec = new;
    end if;
    perform pg_notify('qgis', FORMAT('{ "project": "%s", "operation": "%s", "database": "%s", "schema": "%s", "username": "%s", "when": "%s" }', pname, TG_OP, current_database(), current_schema(), current_user, now() ) );
    return rec;
end
$$;

Depois, crio um processo que escuta as notificações 'qgis' e recebe os parâmetros em JSON. No mínimo podes fazer um reload do Apache e assim garantes que o projeto é relido pelo QGIS Server sempre que é alterado.

Espero que ajude.

Abraço e bom trabalho,

Jorge Gustavo

On 16/06/20 17:45, duartecarreira wrote:
Olá mais uma vez pessoal!

Ando aqui às voltas com o qgis server e estou muito bem impressionado!!

A dúvida é: tendo um projecto em pgsql servido pelo qgis server, estou a ver
sempre o mesmo mapa, mesmo quando altero o projecto e volto a gravar.

Parece haver aqui uma cache no meio... para ver o mapa uso o browser
diretamente, com um url getmap construído à mão. A cache do browser está
off. É enviado o header Cache-Control: no-cache.

Sabem o que se pode estar a passar? O cap doc tb não é actualizado... Posso
adicionar um layer novo, gravar o projecto, e o cap docs não o vai incluir
num request novo.

Se fizer reload ao apache (estou a usar mod_fcgi), já aparece o projecto
correctamente...

Eu li algures que o qgis ou o qgis server fazem cache do cap doc. Se o qgis
server faz isto tb, não vejo como possa ultrapassar este problema... a não
ser desistir de projectos em bd.


Abr,
Duarte



--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html
_______________________________________________
QGIS-pt mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-pt
--
Email Signature
Logo
Geomaster
Jorge Gustavo Rocha | Software Engineer
e: [hidden email] | m: +351 910 333 888
g: 41.54094,-8.40490 | v: 510 906 109
a: Rua António Cândido Pinto, 67, 4715-400 Braga

_______________________________________________
QGIS-pt mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-pt
Reply | Threaded
Open this post in threaded view
|

Re: qgis server e projectos no pgsql - cache?

Giovanni Manghi
Confirmo o que o Jorge disse,
falei com um dos core developers de QGIS server e disse que está disponível para implementar uma solução, caso alguém ou alguma entidade esteja interessado/a.

-- G --



On Tue, Jun 16, 2020 at 10:41 PM Jorge Gustavo Rocha <[hidden email]> wrote:

Olá Duarte,

Os projetos em base de dados têm que ter um tratamento ligeiramente diferente. Porquê? Porque não há o mecanismo de inotify quando um projeto é alterado. Ou seja, o QGIS Server sabe, para os projetos em ficheiro, quando o mesmo é alterado. Nestes casos, o QGIS Server pode reler o projeto e atualizar a cache do projeto.

Com os projetos em base de dados o QGIS Server não é notificado quando são alterados. Por isso, uma forma de o QGIS Server reler o projeto é, como fizeste, fazer o restart ao Apache manualmente.

Eu sou fã de guardar os projetos em base de dados, em ambientes empresariais/multi-utilizador. Nestes casos, o que faço, é por um trigger na(s) tabela(s) dos projetos QGIS que me envia uma notificação sempre que um projeto é criado, alterado ou removido. Em Python, recebo essa notificação e faço as ações decorrentes de cada uma destas coisas.

O trigger em si, é simples e pode ser algo do género:

create trigger project_change_qgis_projects
    after insert or delete or update on public.qgis_projects
    for each row
        execute procedure project_change();

A função que é executado é que envia a notificação:

CREATE OR REPLACE FUNCTION public.project_change() RETURNS trigger LANGUAGE plpgsql AS $$
declare
    pname varchar;
    rec record;
begin
    if (TG_OP = 'DELETE') then
        pname = old.name;
        rec = old;
    else
        pname = new.name;
        rec = new;
    end if;
    perform pg_notify('qgis', FORMAT('{ "project": "%s", "operation": "%s", "database": "%s", "schema": "%s", "username": "%s", "when": "%s" }', pname, TG_OP, current_database(), current_schema(), current_user, now() ) );
    return rec;
end
$$;

Depois, crio um processo que escuta as notificações 'qgis' e recebe os parâmetros em JSON. No mínimo podes fazer um reload do Apache e assim garantes que o projeto é relido pelo QGIS Server sempre que é alterado.

Espero que ajude.

Abraço e bom trabalho,

Jorge Gustavo

On 16/06/20 17:45, duartecarreira wrote:
Olá mais uma vez pessoal!

Ando aqui às voltas com o qgis server e estou muito bem impressionado!!

A dúvida é: tendo um projecto em pgsql servido pelo qgis server, estou a ver
sempre o mesmo mapa, mesmo quando altero o projecto e volto a gravar.

Parece haver aqui uma cache no meio... para ver o mapa uso o browser
diretamente, com um url getmap construído à mão. A cache do browser está
off. É enviado o header Cache-Control: no-cache.

Sabem o que se pode estar a passar? O cap doc tb não é actualizado... Posso
adicionar um layer novo, gravar o projecto, e o cap docs não o vai incluir
num request novo.

Se fizer reload ao apache (estou a usar mod_fcgi), já aparece o projecto
correctamente...

Eu li algures que o qgis ou o qgis server fazem cache do cap doc. Se o qgis
server faz isto tb, não vejo como possa ultrapassar este problema... a não
ser desistir de projectos em bd.


Abr,
Duarte



--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html
_______________________________________________
QGIS-pt mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-pt
--
Logo
Geomaster
Jorge Gustavo Rocha | Software Engineer
e: [hidden email] | m: +351 910 333 888
g: 41.54094,-8.40490 | v: 510 906 109
a: Rua António Cândido Pinto, 67, 4715-400 Braga
_______________________________________________
QGIS-pt mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-pt

_______________________________________________
QGIS-pt mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-pt
Reply | Threaded
Open this post in threaded view
|

Re: qgis server e projectos no pgsql - cache?

duartecarreira
Obrigado pessoal... realmente, foi o que me ocorreu também.

Parece-me que um parâmetro ou request para reler o projecto seria o ideal. O
problema do reload apache é que reinicia todos os processos fcgi, não apenas
os que estão com o projecto em causa. O que é um pouco violento demais para
mim.

Uma coisa interessante seria ter um gestor de processos fcgi do qgis server.
Definir n.º de processos min/max por projecto, reiniciar processos de um
projecto, monitorizar tempos, etc. Quase o que faz o fpm.

Assim, prefiro mesmo usar projectos em ficheiro...

Obg,
Duarte



--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html
_______________________________________________
QGIS-pt mailing list
[hidden email]
https://lists.osgeo.org/mailman/listinfo/qgis-pt