The previous sort would run the risk of missing items which collide on update or create times because of the compound comparison using strictly less than for both the timestamp and the public_id. Sorting both descending avoids this issue.
606 lines
17 KiB
Go
606 lines
17 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package plugin
|
|
|
|
const (
|
|
upsertHostCatalogSecretQuery = `
|
|
insert into host_plugin_catalog_secret
|
|
(catalog_id, secret, key_id)
|
|
values
|
|
(@catalog_id, @secret, @key_id)
|
|
on conflict (catalog_id) do update
|
|
set secret = excluded.secret,
|
|
key_id = excluded.key_id
|
|
returning *;
|
|
`
|
|
|
|
deleteHostCatalogSecretQuery = `
|
|
delete from host_plugin_catalog_secret
|
|
where catalog_id = @catalog_id;
|
|
`
|
|
|
|
setSyncNextRunInQuery = `
|
|
select
|
|
need_sync as sync_now,
|
|
sync_interval_seconds,
|
|
case
|
|
when sync_interval_seconds is null
|
|
then
|
|
extract(epoch from (least(now(), last_sync_time) + ?) - now())::int
|
|
when sync_interval_seconds > 0
|
|
then
|
|
extract(epoch from (least(now(), last_sync_time)) - now())::int + sync_interval_seconds
|
|
else
|
|
0
|
|
end resync_in
|
|
from host_plugin_set
|
|
order by need_sync desc, last_sync_time desc
|
|
limit 1;
|
|
`
|
|
|
|
setSyncJobQuery = `
|
|
need_sync
|
|
or
|
|
sync_interval_seconds is null and last_sync_time <= wt_add_seconds_to_now(?)
|
|
or
|
|
sync_interval_seconds > 0 and wt_add_seconds(sync_interval_seconds, last_sync_time) <= current_timestamp
|
|
`
|
|
|
|
updateSyncDataQuery = `
|
|
update host_plugin_set
|
|
set
|
|
last_sync_time = current_timestamp,
|
|
need_sync = false
|
|
where public_id = ?
|
|
`
|
|
|
|
estimateCountHosts = `
|
|
select sum(reltuples::bigint) as estimate from pg_class where oid in ('host_plugin_host'::regclass)
|
|
`
|
|
|
|
listHostsTemplate = `
|
|
with hosts as (
|
|
select public_id,
|
|
catalog_id,
|
|
external_id,
|
|
external_name,
|
|
name,
|
|
description,
|
|
create_time,
|
|
update_time,
|
|
version
|
|
from host_plugin_host
|
|
where catalog_id = @catalog_id
|
|
order by create_time desc, public_id desc
|
|
limit %d
|
|
),
|
|
host_catalog as (
|
|
select project_id,
|
|
plugin_id,
|
|
public_id
|
|
from host_plugin_catalog
|
|
where public_id = @catalog_id
|
|
),
|
|
host_ip_addresses as (
|
|
select string_agg(distinct host(address), '|') as ip_addresses,
|
|
host_id
|
|
from host_ip_address
|
|
where host_id in (select public_id from hosts)
|
|
group by host_id
|
|
),
|
|
host_dns_names as (
|
|
select string_agg(distinct name, '|') as dns_names,
|
|
host_id
|
|
from host_dns_name
|
|
where host_id in (select public_id from hosts)
|
|
group by host_id
|
|
),
|
|
host_set_ids as (
|
|
select string_agg(distinct set_id, '|') as set_ids,
|
|
host_id
|
|
from host_plugin_set_member
|
|
where host_id in (select public_id from hosts)
|
|
group by host_id
|
|
),
|
|
final as (
|
|
select h.public_id,
|
|
h.catalog_id,
|
|
h.external_id,
|
|
h.external_name,
|
|
hc.project_id,
|
|
hc.plugin_id,
|
|
h.name,
|
|
h.description,
|
|
h.create_time,
|
|
h.update_time,
|
|
h.version,
|
|
hia.ip_addresses,
|
|
hdn.dns_names,
|
|
hsi.set_ids
|
|
from hosts h
|
|
join host_catalog hc on hc.public_id = h.catalog_id
|
|
left outer join host_ip_addresses hia on hia.host_id = h.public_id
|
|
left outer join host_dns_names hdn on hdn.host_id = h.public_id
|
|
left outer join host_set_ids hsi on hsi.host_id = h.public_id
|
|
)
|
|
select *
|
|
from final
|
|
order by create_time desc, public_id desc;
|
|
`
|
|
|
|
listHostsPageTemplate = `
|
|
with hosts as (
|
|
select public_id,
|
|
catalog_id,
|
|
external_id,
|
|
external_name,
|
|
name,
|
|
description,
|
|
create_time,
|
|
update_time,
|
|
version
|
|
from host_plugin_host
|
|
where catalog_id = @catalog_id
|
|
and (create_time, public_id) < (@last_item_create_time, @last_item_id)
|
|
order by create_time desc, public_id desc
|
|
limit %d
|
|
),
|
|
host_catalog as (
|
|
select project_id,
|
|
plugin_id,
|
|
public_id
|
|
from host_plugin_catalog
|
|
where public_id = @catalog_id
|
|
),
|
|
host_ip_addresses as (
|
|
select string_agg(distinct host(address), '|') as ip_addresses,
|
|
host_id
|
|
from host_ip_address
|
|
where host_id in (select public_id from hosts)
|
|
group by host_id
|
|
),
|
|
host_dns_names as (
|
|
select string_agg(distinct name, '|') as dns_names,
|
|
host_id
|
|
from host_dns_name
|
|
where host_id in (select public_id from hosts)
|
|
group by host_id
|
|
),
|
|
host_set_ids as (
|
|
select string_agg(distinct set_id, '|') as set_ids,
|
|
host_id
|
|
from host_plugin_set_member
|
|
where host_id in (select public_id from hosts)
|
|
group by host_id
|
|
),
|
|
final as (
|
|
select h.public_id,
|
|
h.catalog_id,
|
|
h.external_id,
|
|
h.external_name,
|
|
hc.project_id,
|
|
hc.plugin_id,
|
|
h.name,
|
|
h.description,
|
|
h.create_time,
|
|
h.update_time,
|
|
h.version,
|
|
hia.ip_addresses,
|
|
hdn.dns_names,
|
|
hsi.set_ids
|
|
from hosts h
|
|
join host_catalog hc on hc.public_id = h.catalog_id
|
|
left outer join host_ip_addresses hia on hia.host_id = h.public_id
|
|
left outer join host_dns_names hdn on hdn.host_id = h.public_id
|
|
left outer join host_set_ids hsi on hsi.host_id = h.public_id
|
|
)
|
|
select *
|
|
from final
|
|
order by create_time desc, public_id desc;
|
|
`
|
|
|
|
listHostsRefreshTemplate = `
|
|
with hosts as (
|
|
select public_id,
|
|
catalog_id,
|
|
external_id,
|
|
external_name,
|
|
name,
|
|
description,
|
|
create_time,
|
|
update_time,
|
|
version
|
|
from host_plugin_host
|
|
where catalog_id = @catalog_id
|
|
and update_time > @updated_after_time
|
|
order by update_time desc, public_id desc
|
|
limit %d
|
|
),
|
|
host_catalog as (
|
|
select project_id,
|
|
plugin_id,
|
|
public_id
|
|
from host_plugin_catalog
|
|
where public_id = @catalog_id
|
|
),
|
|
host_ip_addresses as (
|
|
select string_agg(distinct host(address), '|') as ip_addresses,
|
|
host_id
|
|
from host_ip_address
|
|
where host_id in (select public_id from hosts)
|
|
group by host_id
|
|
),
|
|
host_dns_names as (
|
|
select string_agg(distinct name, '|') as dns_names,
|
|
host_id
|
|
from host_dns_name
|
|
where host_id in (select public_id from hosts)
|
|
group by host_id
|
|
),
|
|
host_set_ids as (
|
|
select string_agg(distinct set_id, '|') as set_ids,
|
|
host_id
|
|
from host_plugin_set_member
|
|
where host_id in (select public_id from hosts)
|
|
group by host_id
|
|
),
|
|
final as (
|
|
select h.public_id,
|
|
h.catalog_id,
|
|
h.external_id,
|
|
h.external_name,
|
|
hc.project_id,
|
|
hc.plugin_id,
|
|
h.name,
|
|
h.description,
|
|
h.create_time,
|
|
h.update_time,
|
|
h.version,
|
|
hia.ip_addresses,
|
|
hdn.dns_names,
|
|
hsi.set_ids
|
|
from hosts h
|
|
join host_catalog hc on hc.public_id = h.catalog_id
|
|
left outer join host_ip_addresses hia on hia.host_id = h.public_id
|
|
left outer join host_dns_names hdn on hdn.host_id = h.public_id
|
|
left outer join host_set_ids hsi on hsi.host_id = h.public_id
|
|
)
|
|
select *
|
|
from final
|
|
order by update_time desc, public_id desc;
|
|
`
|
|
|
|
listHostsRefreshPageTemplate = `
|
|
with hosts as (
|
|
select public_id,
|
|
catalog_id,
|
|
external_id,
|
|
external_name,
|
|
name,
|
|
description,
|
|
create_time,
|
|
update_time,
|
|
version
|
|
from host_plugin_host
|
|
where catalog_id = @catalog_id
|
|
and update_time > @updated_after_time
|
|
and (update_time, public_id) < (@last_item_update_time, @last_item_id)
|
|
order by update_time desc, public_id desc
|
|
limit %d
|
|
),
|
|
host_catalog as (
|
|
select project_id,
|
|
plugin_id,
|
|
public_id
|
|
from host_plugin_catalog
|
|
where public_id = @catalog_id
|
|
),
|
|
host_ip_addresses as (
|
|
select string_agg(distinct host(address), '|') as ip_addresses,
|
|
host_id
|
|
from host_ip_address
|
|
where host_id in (select public_id from hosts)
|
|
group by host_id
|
|
),
|
|
host_dns_names as (
|
|
select string_agg(distinct name, '|') as dns_names,
|
|
host_id
|
|
from host_dns_name
|
|
where host_id in (select public_id from hosts)
|
|
group by host_id
|
|
),
|
|
host_set_ids as (
|
|
select string_agg(distinct set_id, '|') as set_ids,
|
|
host_id
|
|
from host_plugin_set_member
|
|
where host_id in (select public_id from hosts)
|
|
group by host_id
|
|
),
|
|
final as (
|
|
select h.public_id,
|
|
h.catalog_id,
|
|
h.external_id,
|
|
h.external_name,
|
|
hc.project_id,
|
|
hc.plugin_id,
|
|
h.name,
|
|
h.description,
|
|
h.create_time,
|
|
h.update_time,
|
|
h.version,
|
|
hia.ip_addresses,
|
|
hdn.dns_names,
|
|
hsi.set_ids
|
|
from hosts h
|
|
join host_catalog hc on hc.public_id = h.catalog_id
|
|
left outer join host_ip_addresses hia on hia.host_id = h.public_id
|
|
left outer join host_dns_names hdn on hdn.host_id = h.public_id
|
|
left outer join host_set_ids hsi on hsi.host_id = h.public_id
|
|
)
|
|
select *
|
|
from final
|
|
order by update_time desc, public_id desc;
|
|
`
|
|
|
|
estimateCountHostSets = `
|
|
select sum(reltuples::bigint) as estimate from pg_class where oid in ('host_plugin_set'::regclass)
|
|
`
|
|
|
|
listSetsTemplate = `
|
|
with host_sets as (
|
|
select public_id,
|
|
catalog_id,
|
|
name,
|
|
description,
|
|
create_time,
|
|
update_time,
|
|
last_sync_time,
|
|
need_sync,
|
|
sync_interval_seconds,
|
|
version,
|
|
attributes
|
|
from host_plugin_set
|
|
where catalog_id = @catalog_id
|
|
order by create_time desc, public_id desc
|
|
limit %d
|
|
),
|
|
host_catalog as (
|
|
select plugin_id,
|
|
public_id
|
|
from host_plugin_catalog
|
|
where public_id = @catalog_id
|
|
),
|
|
preferred_endpoints as (
|
|
select string_agg(distinct concat_ws('=', priority, condition), '|') as preferred_endpoints,
|
|
host_set_id
|
|
from host_set_preferred_endpoint
|
|
where host_set_id in (select public_id from host_sets)
|
|
group by host_set_id
|
|
),
|
|
host_set_members as (
|
|
select string_agg(distinct host_id, '|') as host_ids,
|
|
set_id
|
|
from host_plugin_set_member
|
|
where set_id in (select public_id from host_sets)
|
|
group by set_id
|
|
),
|
|
final as (
|
|
select hs.public_id,
|
|
hs.catalog_id,
|
|
hc.plugin_id,
|
|
hs.name,
|
|
hs.description,
|
|
hs.create_time,
|
|
hs.update_time,
|
|
hs.last_sync_time,
|
|
hs.need_sync,
|
|
hs.sync_interval_seconds,
|
|
hs.version,
|
|
hs.attributes,
|
|
ppe.preferred_endpoints,
|
|
hsm.host_ids
|
|
from host_sets hs
|
|
join host_catalog hc on hc.public_id = hs.catalog_id
|
|
left outer join preferred_endpoints ppe on ppe.host_set_id = hs.public_id
|
|
left outer join host_set_members hsm on hsm.set_id = hs.public_id
|
|
)
|
|
select *
|
|
from final
|
|
order by create_time desc, public_id desc;
|
|
`
|
|
|
|
listSetsPageTemplate = `
|
|
with host_sets as (
|
|
select public_id,
|
|
catalog_id,
|
|
name,
|
|
description,
|
|
create_time,
|
|
update_time,
|
|
last_sync_time,
|
|
need_sync,
|
|
sync_interval_seconds,
|
|
version,
|
|
attributes
|
|
from host_plugin_set
|
|
where catalog_id = @catalog_id
|
|
and (create_time, public_id) < (@last_item_create_time, @last_item_id)
|
|
order by create_time desc, public_id desc
|
|
limit %d
|
|
),
|
|
host_catalog as (
|
|
select plugin_id,
|
|
public_id
|
|
from host_plugin_catalog
|
|
where public_id = @catalog_id
|
|
),
|
|
preferred_endpoints as (
|
|
select string_agg(distinct concat_ws('=', priority, condition), '|') as preferred_endpoints,
|
|
host_set_id
|
|
from host_set_preferred_endpoint
|
|
where host_set_id in (select public_id from host_sets)
|
|
group by host_set_id
|
|
),
|
|
host_set_members as (
|
|
select string_agg(distinct host_id, '|') as host_ids,
|
|
set_id
|
|
from host_plugin_set_member
|
|
where set_id in (select public_id from host_sets)
|
|
group by set_id
|
|
),
|
|
final as (
|
|
select hs.public_id,
|
|
hs.catalog_id,
|
|
hc.plugin_id,
|
|
hs.name,
|
|
hs.description,
|
|
hs.create_time,
|
|
hs.update_time,
|
|
hs.last_sync_time,
|
|
hs.need_sync,
|
|
hs.sync_interval_seconds,
|
|
hs.version,
|
|
hs.attributes,
|
|
ppe.preferred_endpoints,
|
|
hsm.host_ids
|
|
from host_sets hs
|
|
join host_catalog hc on hc.public_id = hs.catalog_id
|
|
left outer join preferred_endpoints ppe on ppe.host_set_id = hs.public_id
|
|
left outer join host_set_members hsm on hsm.set_id = hs.public_id
|
|
)
|
|
select *
|
|
from final
|
|
order by create_time desc, public_id desc;
|
|
`
|
|
|
|
listSetsRefreshTemplate = `
|
|
with host_sets as (
|
|
select public_id,
|
|
catalog_id,
|
|
name,
|
|
description,
|
|
create_time,
|
|
update_time,
|
|
last_sync_time,
|
|
need_sync,
|
|
sync_interval_seconds,
|
|
version,
|
|
attributes
|
|
from host_plugin_set
|
|
where catalog_id = @catalog_id
|
|
and update_time > @updated_after_time
|
|
order by update_time desc, public_id desc
|
|
limit %d
|
|
),
|
|
host_catalog as (
|
|
select plugin_id,
|
|
public_id
|
|
from host_plugin_catalog
|
|
where public_id = @catalog_id
|
|
),
|
|
preferred_endpoints as (
|
|
select string_agg(distinct concat_ws('=', priority, condition), '|') as preferred_endpoints,
|
|
host_set_id
|
|
from host_set_preferred_endpoint
|
|
where host_set_id in (select public_id from host_sets)
|
|
group by host_set_id
|
|
),
|
|
host_set_members as (
|
|
select string_agg(distinct host_id, '|') as host_ids,
|
|
set_id
|
|
from host_plugin_set_member
|
|
where set_id in (select public_id from host_sets)
|
|
group by set_id
|
|
),
|
|
final as (
|
|
select hs.public_id,
|
|
hs.catalog_id,
|
|
hc.plugin_id,
|
|
hs.name,
|
|
hs.description,
|
|
hs.create_time,
|
|
hs.update_time,
|
|
hs.last_sync_time,
|
|
hs.need_sync,
|
|
hs.sync_interval_seconds,
|
|
hs.version,
|
|
hs.attributes,
|
|
ppe.preferred_endpoints,
|
|
hsm.host_ids
|
|
from host_sets hs
|
|
join host_catalog hc on hc.public_id = hs.catalog_id
|
|
left outer join preferred_endpoints ppe on ppe.host_set_id = hs.public_id
|
|
left outer join host_set_members hsm on hsm.set_id = hs.public_id
|
|
)
|
|
select *
|
|
from final
|
|
order by update_time desc, public_id desc;
|
|
`
|
|
|
|
listSetsRefreshPageTemplate = `
|
|
with host_sets as (
|
|
select public_id,
|
|
catalog_id,
|
|
name,
|
|
description,
|
|
create_time,
|
|
update_time,
|
|
last_sync_time,
|
|
need_sync,
|
|
sync_interval_seconds,
|
|
version,
|
|
attributes
|
|
from host_plugin_set
|
|
where catalog_id = @catalog_id
|
|
and update_time > @updated_after_time
|
|
and (update_time, public_id) < (@last_item_update_time, @last_item_id)
|
|
order by update_time desc, public_id desc
|
|
limit %d
|
|
),
|
|
host_catalog as (
|
|
select plugin_id,
|
|
public_id
|
|
from host_plugin_catalog
|
|
where public_id = @catalog_id
|
|
),
|
|
preferred_endpoints as (
|
|
select string_agg(distinct concat_ws('=', priority, condition), '|') as preferred_endpoints,
|
|
host_set_id
|
|
from host_set_preferred_endpoint
|
|
where host_set_id in (select public_id from host_sets)
|
|
group by host_set_id
|
|
),
|
|
host_set_members as (
|
|
select string_agg(distinct host_id, '|') as host_ids,
|
|
set_id
|
|
from host_plugin_set_member
|
|
where set_id in (select public_id from host_sets)
|
|
group by set_id
|
|
),
|
|
final as (
|
|
select hs.public_id,
|
|
hs.catalog_id,
|
|
hc.plugin_id,
|
|
hs.name,
|
|
hs.description,
|
|
hs.create_time,
|
|
hs.update_time,
|
|
hs.last_sync_time,
|
|
hs.need_sync,
|
|
hs.sync_interval_seconds,
|
|
hs.version,
|
|
hs.attributes,
|
|
ppe.preferred_endpoints,
|
|
hsm.host_ids
|
|
from host_sets hs
|
|
join host_catalog hc on hc.public_id = hs.catalog_id
|
|
left outer join preferred_endpoints ppe on ppe.host_set_id = hs.public_id
|
|
left outer join host_set_members hsm on hsm.set_id = hs.public_id
|
|
)
|
|
select *
|
|
from final
|
|
order by update_time desc, public_id desc;
|
|
`
|
|
)
|