# Queries on Policy Configurations
# Most of these should be working, but some may still be a work in progress.
# These are formatted for readability, just fyi.

##################################################
## Basic Queries

# Get Policies that Execute @ Ongoing
select policy_id from policies where execution_frequency like "Ongoing";


# Policies with no Scope
select distinct policies.policy_id, policies.name
from policies 
where policies.policy_id not in ( select policy_id from policy_deployment );


# Policies that are Disabled
select distinct policies.policy_id, policies.name
from policies 
where policies.enabled != "1";


# Policies with no Category and not created by Jamf Remote
select distinct policies.policy_id, policies.name, policies.use_for_self_service
from policies 
where
policies.category_id = "-1" and policies.created_by = "jss";


# Policies Scoped to All Users
select distinct policies.policy_id, policies.name
from policies
join policy_deployment on policy_deployment.policy_id = policies.policy_id
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
where policy_deployment.target_type = "106";


# For every Policy ID, get its Site Name (this does not get Policies that are scoped to "None" Site)
select policies.policy_id, sites.site_name
from policies
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
where site_objects.object_type = "3";


##################################################
## Self Service Policies

# Get Policies that are set for Self Service
select policy_id from policies where use_for_self_service = 1;


# Self Service Policies with no Description
select policies.policy_id, policies.name, sites.site_name
from policies 
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
where policies.use_for_self_service = 1 
and
    policies.self_service_description = ""
and
    policies.policy_id = site_objects.object_id
and
    site_objects.object_type = "3";


# Self Service Policies with no Icon
select policies.policy_id, policies.name, sites.site_name
from policies 
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
where policies.use_for_self_service = 1 
and
    policies.self_service_description = ""
and
    policies.policy_id = site_objects.object_id
and
    site_objects.object_type = "3";


# Get every Policy ID and Name that is Self Service and installs a Package (Also get each Package ID and Name)
select distinct policies.policy_id, policies.name, policy_packages.package_id, packages.package_name
from policies 
join policy_packages on policy_packages.policy_id = policies.policy_id
join packages on policy_packages.package_id = packages.package_id
where policies.use_for_self_service = 1;


# Site Self Service Policies that install packages
select distinct policy_packages.policy_id, policies.name, policy_packages.package_id, packages.package_name, sites.site_name
from policies 
join policy_packages on policy_packages.policy_id = policies.policy_id
join packages on policy_packages.package_id = packages.package_id
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
where policies.use_for_self_service = 1
and policies.policy_id = site_objects.object_id
and site_objects.object_type = "3";


# "None" Site Self Service Policies that install packages
select distinct policy_packages.policy_id, policies.name, policy_packages.package_id, packages.package_name
from policies 
join policy_packages on policy_packages.policy_id = policies.policy_id
join packages on policy_packages.package_id = packages.package_id
join site_objects on site_objects.object_id = policies.policy_id
where policies.use_for_self_service = 1
and policies.policy_id not in ( select site_objects.object_id from site_objects where site_objects.object_type = "3");


##################################################
## Inventory Policies

# Get Policies that submitted Inventory within the last 24 hours, get and order by count.
select policy_history.policy_id, policies.name, count(*)
from policy_history
join policies on policies.policy_id = policy_history.policy_id
where
    policy_history.completed_epoch>unix_timestamp(date_sub(now(), interval 1 day))*1000 
and 
    policy_history.policy_id IN
        (select policies.policy_id from policies where update_inventory = 1)
group by policy_history.policy_id order by Count(*) asc;


###  NOT WORKING ###
# Site Inventory Policies
select policy_history.policy_id, policies.name, sites.site_name, count(*)
from policy_history
join policies on policies.policy_id = policy_history.policy_id
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
where
    policy_history.completed_epoch>unix_timestamp(date_sub(now(), interval 1 day))*1000 
and 
    policy_history.policy_id IN
        (select policies.policy_id from policies where update_inventory = 1)
and
    (policies.policy_id = site_objects.object_id
        and site_objects.object_type = "3")
group by policy_history.policy_id order by Count(*) asc;


# v2 of above

SELECT policy_history.policy_id, policies.name, count(*)
FROM policy_history
join policies on policies.policy_id = policy_history.policy_id
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
WHERE
policy_history.completed_epoch>unix_timestamp(date_sub(now(), interval 1 day))*1000 
and 
policy_history.policy_id IN (
	SELECT policies.policy_id FROM policies WHERE update_inventory = 1
)
and (
	policies.policy_id = site_objects.object_id
	and site_objects.object_type = "3"
)
GROUP BY policy_history.policy_id ORDER BY Count(*) asc;


##################################################
## Site Policies @ Ongoing that install packages

select distinct policy_packages.policy_id, policies.name, policy_packages.package_id, packages.package_name, sites.site_name, policy_deployment.target_id
from policies 
join policy_packages on policy_packages.policy_id = policies.policy_id
join packages on policy_packages.package_id = packages.package_id
join policy_deployment on policy_deployment.policy_id = policies.policy_id
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
where policies.execution_frequency = "Ongoing"
and (
	policies.trigger_event_startup = "1"
	or policies.trigger_event_login = "1"
	or policies.trigger_event_logout = "1"
	or policies.trigger_event_network_state_change = "1"
	or policies.trigger_event_checkin = "1"
)
and (
	policies.policy_id = policy_deployment.policy_id
	and policy_deployment.target_type = "7"
)
and (
	policies.policy_id = site_objects.object_id
	and site_objects.object_type = "3"
);


# Policies set at Ongoing for all Events (except Enrollment) installing Software that are Scoped that is not a Smart Group
select distinct policy_packages.policy_id, policies.name, policy_packages.package_id, packages.package_name, sites.site_name, computer_groups.computer_group_id, computer_groups.computer_group_name
from policies 
join policy_packages on policy_packages.policy_id = policies.policy_id
join packages on policy_packages.package_id = packages.package_id
join policy_deployment on policy_deployment.policy_id = policies.policy_id
join computer_groups on computer_groups.computer_group_id = policy_deployment.target_id
join smart_computer_group_criteria on smart_computer_group_criteria.computer_group_id = computer_groups.computer_group_id
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
where policies.execution_frequency = "Ongoing"
and (
	policies.trigger_event_startup = "1"
	or policies.trigger_event_login = "1"
	or policies.trigger_event_logout = "1"
	or policies.trigger_event_network_state_change = "1"
	or policies.trigger_event_checkin = "1"
)
and (
	policies.policy_id = policy_deployment.policy_id
	and policy_deployment.target_type = "7"
	and policy_deployment.target_id in ( select computer_group_id from computer_groups where computer_groups.is_smart_group != 1 )
)
and (
	policies.policy_id = site_objects.object_id
	and site_objects.object_type = "3"
);


# Policies set at Ongoing for all Events (except Enrollment) installing Software that are Scoped to All Computers
select distinct policy_packages.policy_id, policies.name, policy_packages.package_id, packages.package_name, sites.site_name
from policies 
join policy_packages on policy_packages.policy_id = policies.policy_id
join packages on policy_packages.package_id = packages.package_id
join policy_deployment on policy_deployment.policy_id = policies.policy_id
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
where policies.execution_frequency = "Ongoing"
and (
	policies.trigger_event_startup = "1"
	or policies.trigger_event_login = "1"
	or policies.trigger_event_logout = "1"
	or policies.trigger_event_network_state_change = "1"
	or policies.trigger_event_checkin = "1"
)and (
	policies.policy_id = policy_deployment.policy_id
	and policy_deployment.target_type = "101"
)
and (
	policies.policy_id = site_objects.object_id
	and site_objects.object_type = "3"
);


##################################################
## Enrollment Policies that install Software that are scoped to DEP machines

# Enrollment Policies installing Software that are Scoped to All Computers
select distinct policy_packages.policy_id, policies.name, policy_packages.package_id, packages.package_name, sites.site_name
from policies 
join policy_packages on policy_packages.policy_id = policies.policy_id
join packages on policy_packages.package_id = packages.package_id
join policy_deployment on policy_deployment.policy_id = policies.policy_id
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
where policies.trigger_event_enrollment_complete = "1"
and (
	policies.policy_id = policy_deployment.policy_id
	and policy_deployment.target_type = "101"
)
and (
	policies.policy_id = site_objects.object_id
	and site_objects.object_type = "3"
);


# Enrollment Policies installing Software that are Scoped to a Smart Group (Not DEP Enrolled Machines)
select distinct policy_packages.policy_id, policies.name, policy_packages.package_id, packages.package_name, sites.site_name, computer_groups.computer_group_id, computer_groups.computer_group_name
from policies 
join policy_packages on policy_packages.policy_id = policies.policy_id
join packages on policy_packages.package_id = packages.package_id
join policy_deployment on policy_deployment.policy_id = policies.policy_id
join computer_groups on computer_groups.computer_group_id = policy_deployment.target_id
join smart_computer_group_criteria on smart_computer_group_criteria.computer_group_id = computer_groups.computer_group_id
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
where policies.trigger_event_enrollment_complete = "1"
and (
	policies.policy_id = policy_deployment.policy_id
	and policy_deployment.target_type = "7"
	and policy_deployment.target_id in (select computer_group_id from computer_groups where computer_groups.is_smart_group = 1 )
)
and (
	policy_deployment.target_id in ( select computer_group_id from smart_computer_group_criteria where search_field != "Enrollment Method: PreStage enrollment")
)
and (
	policies.policy_id = site_objects.object_id
	and site_objects.object_type = "3"
);


# Enrollment Policies installing Software that are Scoped to DEP Enrolled Machines
select distinct policy_packages.policy_id, policies.name, policy_packages.package_id, packages.package_name, sites.site_name, computer_groups.computer_group_id, computer_groups.computer_group_name
from policies 
join policy_packages on policy_packages.policy_id = policies.policy_id
join packages on policy_packages.package_id = packages.package_id
join policy_deployment on policy_deployment.policy_id = policies.policy_id
join computer_groups on computer_groups.computer_group_id = policy_deployment.target_id
join smart_computer_group_criteria on smart_computer_group_criteria.computer_group_id = computer_groups.computer_group_id
join site_objects on site_objects.object_id = policies.policy_id
join sites on sites.site_id = site_objects.site_id
where policies.trigger_event_enrollment_complete = "1"
and (
	policies.policy_id = policy_deployment.policy_id
	and policy_deployment.target_type = "7"
	and policy_deployment.target_id in (select computer_group_id from computer_groups where computer_groups.is_smart_group = 1 )
)
and (
	policy_deployment.target_id in ( select computer_group_id from smart_computer_group_criteria where search_field = "Enrollment Method: PreStage enrollment")
)
and (
	policies.policy_id = site_objects.object_id
	and site_objects.object_type = "3"
);
