Website: Update categories on pricing page features table (#15835)

Changes:
- Added a new (required) key to pricing-features-table.yml:
`pricingTableCategories` - an array of categories that will be used to
categorize the feature on the pricing page.
- Updated build-static-content to validate pricingTableCategories values
- Updated the pricing page features table to be categorized by the
pricingTableCategories value of features.
- Updated the names of tiers on the pricing features table to match the
cards above the table ("Free" » "Community")
This commit is contained in:
Eric
2023-12-22 18:35:16 -06:00
committed by GitHub
parent e0018294d6
commit a4fdbdd142
4 changed files with 188 additions and 17 deletions
+77 -1
View File
@@ -9,6 +9,7 @@
screenshotSrc:
tier: Free
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
usualDepartment: Security
dri: mikermcneil
demos:
@@ -42,6 +43,7 @@
dri: mikermcneil
usualDepartment: IT
productCategories: [Endpoint operations,Device management]
pricingTableCategories: [Device management]
demos:
- description: A large tech company used scripts to fix issues with their security and compliance agents on workstations.
buzzwords: [Remote script execution,PowerShell scripts,Bash scripts]
@@ -70,6 +72,7 @@
usualDepartment: Security
tier: Free
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
dri: mikermcneil
demos:
- description: A large tech company used Fleet's CIS Benchmark policies to automatically assess posuture of 80,000 endpoints.
@@ -111,6 +114,7 @@
screenshotSrc:
tier: Free
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
buzzwords: [Device users,human-to-device mapping]
dri: mikermcneil
@@ -137,6 +141,7 @@
tier: Free
usualDepartment: Security
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
buzzwords: [Host-based intrusion detection system (HIDS,Indicators of Compromise (IOCs),Feeder for SIEM]
demos:
- description: A top media company wanted to share more security data with other departments without slowing down hosts.
@@ -162,6 +167,7 @@
tier: Free # Either "Free" or "Premium"
usualDepartment: Security # or omit if there isn't a particular departmental leaning we've noticed
productCategories: [Endpoint operations] # or omit if this isn't associated with a single product category
pricingTableCategories: [Endpoint operations]
dri: mikermcneil #GitHub user name
demos:
- description: A top gaming company needed a way to monitor critical files on production Debian servers.
@@ -189,6 +195,7 @@
dri: mikermcneil
usualDepartment: Security
productCategories: [Endpoint operations,Vulnerability management]
pricingTableCategories: [Vulnerability management]
buzzwords: [YARA scanning,Cyber Threat Intelligence (CTI),Indicators of compromise (IOCs),Antivirus (AV),Endpoint protection platform (EPP),Endpoint detection and response (EDR),Malware detection,Signature-based malware detection,Malware scanning,Malware analysis,Anomaly detection]
demos:
- description: A top media company used Fleet policies with YARA rules to continuously scan host filesystems for malware signatures provided by internal and external threat intelligence teams.
@@ -218,6 +225,7 @@
dri: mikermcneil
usualDepartment: Security
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
buzzwords: [Security analytics,Behavioral analytics,MITRE ATT&CK,Tactics techniques and procedures (TTPs),Security information and event management (SIEM)]
demos:
- description:
@@ -232,6 +240,7 @@
dri: mikermcneil
usualDepartment: Security
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
buzzwords: []
demos:
- description:
@@ -246,6 +255,7 @@
dri: mikermcneil
usualDepartment: Security
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
buzzwords: []
demos:
- description:
@@ -260,6 +270,7 @@
dri: mikermcneil
usualDepartment: Security
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
comingSoonOn: YYYY-MM-DD
buzzwords: [Mandatory Access Control (MAC),Privilege confinement,Binary authorization,Santa,Binary allowlisting,Binary whitelisting]
demos:
@@ -281,6 +292,7 @@
documentationUrl: https://fleetdm.com/docs/using-fleet/fleetd
tier: Free
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
# ╦╔╗╔╔═╗╔╦╗╔═╗╦ ╦ ╔═╗╦═╗╔═╗
# ║║║║╚═╗ ║ ╠═╣║ ║ ║╣ ╠╦╝╚═╗
@@ -288,6 +300,7 @@
- industryName: Installers (self-service)
tier: Free
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
documentationUrl: https://fleetdm.com/docs/using-fleet/fleetd
waysToUse:
@@ -305,6 +318,7 @@
documentationUrl: https://fleetdm.com/docs/using-fleet/fleetd
tier: Free
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
# ╦═╗╔═╗╔╦╗╔═╗╔╦╗╔═╗ ╔═╗╔═╗╔╦╗╔╦╗╦╔╗╔╔═╗╔═╗
# ╠╦╝║╣ ║║║║ ║ ║ ║╣ ╚═╗║╣ ║ ║ ║║║║║ ╦╚═╗
@@ -315,6 +329,7 @@
moreInfoUrl: https://github.com/fleetdm/fleet/issues/13825
tier: Free
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
usualDepartment: Security
# ╦ ╦╔═╗╦═╗╦╔═╗╔╗ ╦ ╔═╗ ╔═╗╔╗╔╦═╗╔═╗╦ ╦ ╔╦╗╔═╗╔╗╔╔╦╗
# ╚╗╔╝╠═╣╠╦╝║╠═╣╠╩╗║ ║╣ ║╣ ║║║╠╦╝║ ║║ ║ ║║║║╣ ║║║ ║
@@ -324,6 +339,7 @@
documentationUrl: https://fleetdm.com/docs/configuration/configuration-files#teams
tier: Premium
productCategories: [Endpoint operations, Device management]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
# ╔═╗╦═╗╦╦ ╦╔═╗╔╦╗╔═╗ ╦ ╦╔═╗╔╦╗╔═╗╔╦╗╔═╗ ╦═╗╔═╗╔═╗╦╔═╗╔╦╗╦═╗╦ ╦
# ╠═╝╠╦╝║╚╗╔╝╠═╣ ║ ║╣ ║ ║╠═╝ ║║╠═╣ ║ ║╣ ╠╦╝║╣ ║ ╦║╚═╗ ║ ╠╦╝╚╦╝
@@ -334,6 +350,7 @@
documentationUrl: https://fleetdm.com/docs/using-fleet/update-agents
tier: Premium
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
usualDepartment: Security
# ╔═╗╦ ╦╔═╗╔╦╗╔═╗╔╦╗ ╔╦╗╔═╗╔╗ ╦ ╔═╗╔═╗
# ║ ║ ║╚═╗ ║ ║ ║║║║ ║ ╠═╣╠╩╗║ ║╣ ╚═╗
@@ -345,6 +362,7 @@
moreInfoUrl: https://github.com/trailofbits/osquery-extensions/blob/3df2b72ad78549e25344c79dbc9bce6808c4d92a/README.md#extensions
tier: Premium
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
#
# ╦═╗╔═╗╔═╗╔╦╗ ╔═╗╔═╗╦
@@ -354,6 +372,7 @@
friendlyName: Automate any feature
description:
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Integrations]
usualDepartment: IT
documentationUrl: https://fleetdm.com/docs/rest-api/rest-api
screenshotSrc:
@@ -366,6 +385,7 @@
friendlyName: fleetctl
documentationUrl: https://fleetdm.com/docs/using-fleet/fleetctl-cli
productCategories: [Endpoint operations,Device management]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
tier: Free
# ╦ ╦╔═╗╔╗ ╦ ╦╔═╗╔═╗╦╔═╔═╗
@@ -373,6 +393,7 @@
# ╚╩╝╚═╝╚═╝╩ ╩╚═╝╚═╝╩ ╩╚═╝
- industryName: Webhooks
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Integrations]
usualDepartment: IT
friendlyName:
tier: Free
@@ -383,6 +404,7 @@
friendlyName: Trigger webhooks or run scripts
description: Fire off webhooks or run scripts on hosts when certain things happen in Fleet.
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Integrations]
comingSoonOn: 2024-06-30
tier: Free
buzzwords: [Automated remediation,Auto-remediation,Self-healing]
@@ -399,6 +421,7 @@
description: Fork the best practices repo and use the GitHub Action to hook it up to your Fleet instance in minutes. Coming soon (2024-03-31)
moreInfoUrl: https://github.com/fleetdm/fleet/issues/13643
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Deployment]
usualDepartment: IT
tier: Free
demos:
@@ -411,6 +434,7 @@
- industryName: Free integrations (Tines, Snowflake, Terraform, Chronicle, etc)
friendlyName: Borrow off-the-shelf tactics from the community
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Integrations]
usualDepartment: IT
description:
moreInfoUrl: https://fleetdm.com/integrations
@@ -439,6 +463,7 @@
friendlyName: Borrow off-the-shelf tactics from legendary brands
description: Plug in to cutting edge frameworks from similar organizations.
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Integrations]
usualDepartment: IT
moreInfoUrl: https://fleetdm.com/integrations
tier: Premium
@@ -452,18 +477,23 @@
- description: (Custom IdP) Manage access to Fleet single sign-on (SSO) through any IdP (using SAML).
- industryName: Public issue tracker (GitHub)
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Support]
tier: Free
- industryName: Community Slack channel
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Support]
tier: Free
- industryName: Unlimited email support (confidential)
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Support]
tier: Premium
- industryName: Phone and video call support
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Support]
tier: Premium
- industryName: Self-managed
friendlyName: Host it yourself
pricingTableCategories: [Deployment]
documentationUrl: https://fleetdm.com/docs/deploy/introduction
productCategories: [Endpoint operations,Device management,Vulnerability management]
tier: Free
@@ -472,7 +502,9 @@
usualDepartment: IT
tier: Free
productCategories: [Endpoint operations]
pricingTableCategories: [Deployment]
- industryName: Managed Cloud
pricingTableCategories: [Deployment]
productCategories: [Endpoint operations,Device management,Vulnerability management]
tier: Premium
- industryName: Interactive MDM migration # « end-user initiated MDM migration, with interactive UI
@@ -480,6 +512,7 @@
documentationUrl: ""
usualDepartment: IT
productCategories: [Device management]
pricingTableCategories: [Device management]
- industryName: Remotely enforce OS settings
documentationUrl: https://fleetdm.com/docs/using-fleet/mdm-custom-macos-settings
tier: Free
@@ -493,32 +526,38 @@
moreInfoUrl: https://github.com/fleetdm/fleet/issues/14715
- description: Automatically re-deploy configuration profiles on macOS they're not installed.
productCategories: [Device management]
pricingTableCategories: [Device management]
- industryName: Self service
description: Provide resolution instructions for end users through Fleet Desktop that suggest how an end user can fix a posture issue themselves.
documentationUrl: https://fleetdm.com/docs/using-fleet/fleet-desktop
tier: Premium
usualDepartment: IT
productCategories: [Device management]
pricingTableCategories: [Device management]
- industryName: User-initiated enrollment of macOS computers
documentationUrl: https://fleetdm.com/docs/using-fleet/mdm-migration-guide#migrate-manually-enrolled-hosts
tier: Free
usualDepartment: IT
productCategories: [Device management]
pricingTableCategories: [Device management]
- industryName: Low-level MDM commands for macOS and Windows (e.g. remote restart)
documentationUrl: https://fleetdm.com/docs/using-fleet/mdm-commands
tier: Free
usualDepartment: IT
productCategories: [Device management]
pricingTableCategories: [Device management]
- industryName: Native macOS update reminders
documentationUrl: https://fleetdm.com/docs/using-fleet/mdm-macos-updates
tier: Free
usualDepartment: IT
productCategories: [Device management]
pricingTableCategories: [Device management]
- industryName: Zero-touch setup for macOS computers
documentationUrl: https://fleetdm.com/docs/using-fleet/mdm-macos-setup-experience
tier: Premium
usualDepartment: IT
productCategories: [Device management]
pricingTableCategories: [Device management]
waysToUse:
- description: Ship a macOS workstation to the end users home and have them automatically enroll to Fleet during out-of-the-box setup.
- description: Ship a Windows workstation to the end users home and have them automatically enroll to Fleet during out-of-the-box setup. Coming soon (2023-12-30) #Customer-preston
@@ -529,6 +568,7 @@
tier: Premium
usualDepartment: IT
productCategories: [Device management,Vulnerability management]
pricingTableCategories: [Device management]
waysToUse:
- description: Enforce macOS updates via Nudge.
- description: Automatically update Windows after the end user reaches a deadline. Coming soon (2023-12-30) #Customer-preston
@@ -537,11 +577,13 @@
tier: Premium
usualDepartment: IT
productCategories: [Device management]
pricingTableCategories: [Device management]
- industryName: Remotely lock and wipe macOS computers
documentationUrl: https://fleetdm.com/docs/using-fleet/mdm-commands
tier: Premium
usualDepartment: IT
productCategories: [Device management]
pricingTableCategories: [Device management]
- industryName: Install apps and packages on macOS and Windows computers.
description:
moreInfoUrl: https://github.com/fleetdm/fleet/issues/14921
@@ -549,15 +591,18 @@
comingSoonOn: 2023-12-30 #Customer-reedtimmer and customer-preston
usualDepartment: IT
productCategories: [Device management]
pricingTableCategories: [Device management]
- industryName: Puppet module
documentationUrl: https://fleetdm.com/docs/using-fleet/puppet-module
friendlyName: Map macOS settings to computers with Puppet module
tier: Premium
usualDepartment: IT
productCategories: [Device management]
pricingTableCategories: [Device management]
- industryName: Software inventory
tier: Free
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Endpoint operations]
waysToUse:
- description: Implement software inventory recommendations from the SANS 20 / CIS 18.
moreInfoUrl: https://docs.google.com/document/d/1E6EQMMqrsRc6Z3YsR6Q33OaF9eAa8zLNaz4K2YzFdyo/edit#heading=h.7en766pueek4
@@ -566,23 +611,28 @@
moreInfoUrl: https://github.com/fleetdm/fleet/issues/14674
- industryName: Hardware inventory
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Endpoint operations]
tier: Free
waysToUse:
- description: Implement hardware and infrastructure inventory recommendations from the SANS 20 / CIS 18.
moreInfoUrl: https://docs.google.com/document/d/1E6EQMMqrsRc6Z3YsR6Q33OaF9eAa8zLNaz4K2YzFdyo/edit#heading=h.7en766pueek4
- industryName: Device inventory dashboard
productCategories: [Endpoint operations,Device management]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
tier: Free
- industryName: Browse installed software packages
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Endpoint operations]
tier: Free
- industryName: Search devices by IP, serial, hostname, UUID
productCategories: [Endpoint operations,Device management]
pricingTableCategories: [Endpoint operations]
tier: Free
- industryName: Labels (SQL-driven)
friendlyName: Filter hosts using SQL
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
tier: Free
- industryName: Custom device data for help desk
@@ -592,21 +642,25 @@
comingSoonOn: 2023-12-31
usualDepartment: IT
productCategories: [Endpoint operations,Device management]
pricingTableCategories: [Device management]
- industryName: Baselines (device groups)
friendlyName: Manage different endpoints differently
description: Set baselines and strategies for hosts in different situations called "teams", and move hosts between them via API-driven automations or a simple, delegatable user interface with role-based access.
tier: Premium
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Endpoint operations]
waysToUse:
- description: Automate remediation for different applications with different security postures (cloud security engineering)
- industryName: Generate reports for groups of devices
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
tier: Premium
- industryName: Versionable queries and config (GitOps)
documentationUrl: https://fleetdm.com/guides/using-github-actions-to-apply-configuration-profiles-with-fleet#basic-article
tier: Free
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
demos:
- description: A top financial services company needed to set up rolling deployments for changes to osquery agents running on their production servers.
@@ -615,13 +669,16 @@
tier: Free
documentationUrl: https://fleetdm.com/transparency
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
- industryName: Single sign on (SSO, SAML)
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
tier: Free
- industryName: Disk encryption
friendlyName: Ensure hard disks are encrypted
productCategories: [Device management]
pricingTableCategories: [Device management]
usualDepartment: Security
description: Encrypt hard disks of macOS and Windows computers, manage escrowed encryption keys, and report on disk encryption status (FileVault, BitLocker).
tier: Free
@@ -632,43 +689,52 @@
- description: Encrypt hard disks on Windows with BitLocker.
- industryName: Audit queries and user activities
productCategories: [Endpoint operations,Device management]
pricingTableCategories: [Endpoint operations]
tier: Free
usualDepartment: Security
- industryName: Grant API-only access
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
tier: Free
- industryName: Programmable audit log
productCategories: [Endpoint operations]
productCategories: [Endpoint operations, Device management]
pricingTableCategories: [Endpoint operations, Device management]
tier: Premium
usualDepartment: Security
waysToUse:
- description: Export activity of Fleet admins to your SIEM or data lake
- industryName: Just-in-time (JIT) provisioning
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
tier: Premium
- industryName: Automated user role sync via Okta, AD, or any IDP
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Device management]
usualDepartment: IT
tier: Premium
waysToUse:
- description: Automatically set admin access to Fleet based on your IDP
- industryName: Vanta integration
productCategories: [Endpoint operations,Device management]
pricingTableCategories: [Integrations]
usualDepartment: IT
tier: Premium
- industryName: Trigger a workflow based on a failing policy
productCategories: [Endpoint operations,Device management]
pricingTableCategories: [Integrations]
usualDepartment: IT
tier: Premium
- industryName: Role-based access control
productCategories: [Endpoint operations,Device management,Vulnerability management]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
tier: Premium
- industryName: Detect vulnerable software #TODO: find a better industryName and make this the friendly name. Maybe separate out export.
tier: Free
usualDepartment: Security
productCategories: [Vulnerability management]
pricingTableCategories: [Vulnerability management]
demos:
- description: A top gaming company wanted to replace Qualys for infrastructure vulnerability detection.
quote: So we have some stuff today through Qualys, but it's just not very good. A lot of it is...it's just really noisy. I'm trying to find out specifically, actually what packages are installed where, and then the ability to live query them.
@@ -679,6 +745,7 @@
- industryName: Query performance monitoring
tier: Free
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
demos:
- description: A top software company needed to understand the performance impact of osquery queries before running them on all of their production Linux servers.
moreInfoUrl: https://docs.google.com/document/d/1WzMc8GJCRU6tTBb6gLsSTzFysqtXO8CtP2sXMPKgYSk/edit?disco=AAAA6xuVxGg
@@ -690,10 +757,13 @@
moreInfoUrl: https://github.com/fleetdm/fleet/issues/467
- industryName: Detect and surface issues with devices (policies)
productCategories: [Endpoint operations,Device management]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
tier: Free
- industryName: Vulnerability dashboard
productCategories: [Vulnerability management]
pricingTableCategories: [Vulnerability management]
usualDepartment: Security
tier: Premium
comingSoonOn: 2024-03-31
waysToUse:
@@ -701,24 +771,29 @@
- industryName: Policy scoring
friendlyName: Mark policies as critical
productCategories: [Endpoint operations,Device management]
pricingTableCategories: [Endpoint operations]
usualDepartment: IT
tier: Premium
- industryName: Vulnerability scores (EPSS and CVSS) #TODO: Incorporate this perspective: https://github.com/fleetdm/confidential/issues/4120#issuecomment-1802350614
tier: Premium
usualDepartment: Security
productCategories: [Vulnerability management]
pricingTableCategories: [Vulnerability management]
- industryName: CISA KEVs (known exploited vulnerabilities) #TODO: Incorporate this perspective: https://github.com/fleetdm/confidential/issues/4120#issuecomment-1802350614
tier: Premium
usualDepartment: Security
productCategories: [Vulnerability management]
pricingTableCategories: [Vulnerability management]
- industryName: Patched version #Can be determined using description from National Vulnerability Database (NVD). Description tells you which versions are affected.
tier: Premium
usualDepartment: Security
productCategories: [Vulnerability management]
pricingTableCategories: [Vulnerability management]
- industryName: Flexible log destinations (AWS Kinesis, Lambda, GCP, Kafka)
tier: Free
usualDepartment: Security
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
waysToUse:
- description: Choose different file sizes for automated query results and agent logs. Coming soon (2024-01-26) #Customer-blanco
moreInfoUrl: https://github.com/fleetdm/fleet/issues/11999
@@ -726,3 +801,4 @@
tier: Free
usualDepartment: Security
productCategories: [Endpoint operations]
pricingTableCategories: [Endpoint operations]
+39 -6
View File
@@ -29,12 +29,11 @@ module.exports = {
let pricingTable = [];
// Note: These product categories are hardcoded in to reduce complexity, an alternative way of building this from the pricingFeaturesTable is: let productCategories = _.union(_.flatten(_.pluck(pricingTableFeatures, 'productCategories')));
let productCategories = ['Endpoint operations', 'Device management', 'Vulnerability management'];
for(let category of productCategories) {
// Get all the features in that have a productCategories array that contains this category.
let pricingTableCategories = ['Support', 'Deployment', 'Integrations','Device management', 'Endpoint operations', 'Vulnerability management'];
for(let category of pricingTableCategories) {
// Get all the features in that have a pricingTableFeatures array that contains this category.
let featuresInThisCategory = _.filter(pricingTableFeatures, (feature)=>{
return _.contains(feature.productCategories, category);
return _.contains(feature.pricingTableCategories, category);
});
// Build a dictionary containing the category name, and all features in the category, sorting premium features to the bottom of the list.
let allFeaturesInThisCategory = {
@@ -47,9 +46,43 @@ module.exports = {
pricingTable.push(allFeaturesInThisCategory);
}
let pricingTableForSecurity = _.filter(pricingTable, (category)=>{
return category.categoryName !== 'Device management' && (category.usualDepartment === 'Security' || category.usualDepartment === undefined);
});
let categoryOrderForSecurityPricingTable = ['Support', 'Deployment', 'Integrations', 'Endpoint operations', 'Vulnerability management'];
// Sort the security-focused pricing table from the order of the elements in the categoryOrderForSecurityPricingTable array.
pricingTableForSecurity.sort((a, b)=>{
// If there is a category that is not in the list above, sort it to the end of the list.
if(categoryOrderForSecurityPricingTable.indexOf(a.categoryName) === -1){
return 1;
} else if(categoryOrderForSecurityPricingTable.indexOf(b.categoryName) === -1) {
return -1;
}
return categoryOrderForSecurityPricingTable.indexOf(a.categoryName) - categoryOrderForSecurityPricingTable.indexOf(b.categoryName);
});
let pricingTableForIt = _.filter(pricingTable, (category)=>{
return category.categoryName !== 'Vulnerability management' && (category.usualDepartment === 'Security' || category.usualDepartment === undefined);
});
let categoryOrderForITPricingTable = ['Device management', 'Support', 'Deployment', 'Integrations', 'Endpoint operations'];
// Sort the IT-focused pricing table from the order of the elements in the categoryOrderForITPricingTable array.
pricingTableForIt.sort((a, b)=>{
// If there is a category that is not in the list above, sort it to the end of the list.
if(categoryOrderForITPricingTable.indexOf(a.categoryName) === -1){
return 1;
} else if(categoryOrderForITPricingTable.indexOf(b.categoryName) === -1) {
return -1;
}
return categoryOrderForITPricingTable.indexOf(a.categoryName) - categoryOrderForITPricingTable.indexOf(b.categoryName);
});
// Respond with view.
return {
pricingTable
pricingTable,
pricingTableForSecurity,
pricingTableForIt
};
}
+12
View File
@@ -810,6 +810,7 @@ module.exports = {
let yaml = await sails.helpers.fs.read(path.join(topLvlRepoPath, RELATIVE_PATH_TO_PRICING_TABLE_YML_IN_FLEET_REPO)).intercept('doesNotExist', (err)=>new Error(`Could not find pricing table features YAML file at "${RELATIVE_PATH_TO_PRICING_TABLE_YML_IN_FLEET_REPO}". Was it accidentally moved? Raw error: `+err.message));
let pricingTableFeatures = YAML.parse(yaml, {prettyErrors: true});
let VALID_PRODUCT_CATEGORIES = ['Endpoint operations', 'Device management', 'Vulnerability management'];
let VALID_PRICING_TABLE_CATEGORIES = ['Support', 'Deployment', 'Integrations', 'Endpoint operations', 'Device management', 'Vulnerability management'];
for(let feature of pricingTableFeatures){
if(feature.name) {// Compatibility check
throw new Error(`Could not build pricing table config from pricing-features-table.yml. A feature has a "name" (${feature.name}) which is no longer supported. To resolve, add a "industryName" to this feature: ${feature}`);
@@ -833,6 +834,17 @@ module.exports = {
}
}
}
if(!feature.pricingTableCategories){
throw new Error(`Could not build pricing table config from pricing-features-table.yml. The ${feature.industryName} feature is missing a 'pricingTableCategory' value. Please add this value to this feature to be the category in the pricing table`);
} else if(!_.isArray(feature.pricingTableCategories)){
throw new Error(`Could not build pricing table config from pricing-features-table.yml. The ${feature.industryName} feature has an invalid 'pricingTableCategory' value. Please change the productCategories for this feature to be an array of pricing table categories. Type of invalid pricingTableCategory value: ${typeof feature.pricingTableCategory}`);
} else {
for(let category of feature.pricingTableCategories){
if(!VALID_PRICING_TABLE_CATEGORIES.includes(category)){
throw new Error(`Could not build pricing table config from pricing-features-table.yml. The ${feature.industryName} feature has an invalid 'pricingTableCategory' value. Please set this value to be one of: "${VALID_PRICING_TABLE_CATEGORIES.join('", "')}" and try running this script again. Invalid pricing table value: ${category}`);
}
}
}
if(!feature.tier) { // Throw an error if a feature is missing a `tier`.
throw new Error(`Could not build pricing table config from pricing-features-table.yml. The ${feature.industryName} feature is missing a "tier". To resolve, add a "tier" (either "Free" or "Premium") to this feature.`);
} else if(!_.contains(['Free', 'Premium'], feature.tier)){ // Throw an error if a feature's `tier` is not "Free" or "Premium".
+60 -10
View File
@@ -20,7 +20,7 @@
</div>
</div>
</div>
<a purpose="card-button" class="btn btn-block btn-lg btn-primary mx-auto" href="/try-fleet">Get started free</a>
<a purpose="card-button" class="btn btn-block btn-lg btn-primary mx-auto" href="https://github.com/fleetdm/fleet">View source code</a>
</div>
<%// Fleet Premium tier card %>
<div purpose="premium-card" class="d-flex flex-column justify-content-center">
@@ -37,7 +37,7 @@
</div>
</div>
<div>
<a purpose="card-button" class="btn btn-block btn-lg btn-primary mx-auto mb-0" href="/customers/register">Get started</a>
<a purpose="card-button" class="btn btn-block btn-lg btn-primary mx-auto mb-0" @click="clickOpenChatWidget()">Show me</a>
<p purpose="contact-sales-link">Have a large deployment? <a @click="clickOpenChatWidget()">Contact sales</a>.</p>
</div>
</div>
@@ -62,7 +62,7 @@
<td><h4><%- category.categoryName %></h4></td>
<%if(pricingTable.indexOf(category) === 0) {%>
<td class="text-center">
<strong>Free</strong>
<strong>Community</strong>
</td>
<%}else {%>
<td ></td>
@@ -103,7 +103,7 @@
<strong><%- feature.name %><%- feature.comingSoon ? '*' : '' %></strong>
</div>
<div class="d-flex flex-row justify-content-between align-items-center">
Free
Community
<%if(feature.tier === 'Free') {%>
<img class="d-block" alt="checkmark" purpose="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
<% } %>
@@ -120,16 +120,16 @@
</div>
</div>
<%// Filtered features %>
<div purpose="features-table" class="d-flex flex-column justify-content-center mx-auto px-0" v-else>
<div purpose="features-table" class="d-flex flex-column justify-content-center mx-auto px-0" v-else-if="pricingMode === 'Security'">
<div class="d-flex flex-column justify-content-center p-0">
<%// Desktop filtered features tables %>
<div class="d-none d-md-block">
<table purpose="pricing-categories-table" class="table" v-for="(category, index) in pricingTable">
<table purpose="pricing-categories-table" class="table" v-for="(category, index) in pricingTableForSecurity">
<thead>
<tr>
<td><h4>{{category.categoryName}}</h4></td>
<td class="text-center" v-if="index === 0">
<strong>Free</strong>
<strong>Community</strong>
</td>
<td v-else></td>
<td class="text-center" v-if="index === 0">
@@ -139,7 +139,7 @@
</tr>
</thead>
<tbody>
<tr v-for="feature in category.features" v-if="feature.usualDepartment === pricingMode">
<tr v-for="feature in category.features">
<td purpose="feature-name">{{feature.name}}{{feature.comingSoon ? '*' : ''}}</td>
<td purpose="table-checkmark" v-if="feature.tier === 'Free'"><img class="mx-auto" alt="checkmark" purpose="checkmark" src="/images/icon-checkmark-green-16x16@2x.png"></td>
<td purpose="table-checkmark" v-else></td>
@@ -150,9 +150,59 @@
<p style="color: #515774;" class="mb-0 w-100">* Coming soon</p>
</div>
<%// Mobile filtered features tables %>
<div purpose="mobile-feature-table-section" class="d-block d-md-none" v-for="category in pricingTable">
<div purpose="mobile-feature-table-section" class="d-block d-md-none" v-for="category in pricingTableForSecurity">
<h4>{{category.categoryName}}</h4>
<div purpose="mobile-features-table" class="d-flex flex-column" v-for="feature in category.features" v-if="feature.usualDepartment === pricingMode">
<div purpose="mobile-features-table" class="d-flex flex-column" v-for="feature in category.features">
<div purpose="striped-row" class="d-flex flex-row justify-content-between align-items-center" >
<strong>{{feature.name}}{{ feature.comingSoon ? '*' : ''}}</strong>
</div>
<div class="d-flex flex-row justify-content-between align-items-center">
Free
<img class="d-block" alt="checkmark" purpose="checkmark" src="/images/icon-checkmark-green-16x16@2x.png" v-if="feature.tier === 'Free'">
</div>
<div purpose="striped-row" class="d-flex flex-row justify-content-between align-items-center">
Premium
<img class="d-block" alt="checkmark" purpose="checkmark" src="/images/icon-checkmark-green-16x16@2x.png">
</div>
</div>
</div>
<p style="color: #515774;" class="d-block d-md-none mb-0 w-100">* Coming soon</p>
</div>
</div>
<%// IT features %>
<div purpose="features-table" class="d-flex flex-column justify-content-center mx-auto px-0" v-else-if="pricingMode === 'IT'">
<div class="d-flex flex-column justify-content-center p-0">
<%// Desktop filtered features tables %>
<div class="d-none d-md-block">
<table purpose="pricing-categories-table" class="table" v-for="(category, index) in pricingTableForIt">
<thead>
<tr>
<td><h4>{{category.categoryName}}</h4></td>
<td class="text-center" v-if="index === 0">
<strong>Community</strong>
</td>
<td v-else></td>
<td class="text-center" v-if="index === 0">
<strong>Premium</strong>
</td>
<td v-else></td>
</tr>
</thead>
<tbody>
<tr v-for="feature in category.features">
<td purpose="feature-name">{{feature.name}}{{feature.comingSoon ? '*' : ''}}</td>
<td purpose="table-checkmark" v-if="feature.tier === 'Free'"><img class="mx-auto" alt="checkmark" purpose="checkmark" src="/images/icon-checkmark-green-16x16@2x.png"></td>
<td purpose="table-checkmark" v-else></td>
<td purpose="table-checkmark"><img class="mx-auto" alt="checkmark" purpose="checkmark" src="/images/icon-checkmark-green-16x16@2x.png"></td>
</tr>
</tbody>
</table>
<p style="color: #515774;" class="mb-0 w-100">* Coming soon</p>
</div>
<%// Mobile filtered features tables %>
<div purpose="mobile-feature-table-section" class="d-block d-md-none" v-for="category in pricingTableForIt">
<h4>{{category.categoryName}}</h4>
<div purpose="mobile-features-table" class="d-flex flex-column" v-for="feature in category.features">
<div purpose="striped-row" class="d-flex flex-row justify-content-between align-items-center" >
<strong>{{feature.name}}{{ feature.comingSoon ? '*' : ''}}</strong>
</div>