Documentation
¶
Index ¶
- Constants
- Variables
- func Marshal[T any](data T) (io.Reader, error)
- func Unmarshal[T any](data io.ReadCloser) (T, error)
- type Action
- type Alert
- type AlertInterface
- type Base
- type Client
- func (client *Client) CreateAlert(ctx context.Context, alert Alert) (Alert, error)
- func (client *Client) CreateAlertURL() string
- func (client *Client) CreateGroupMapping(ctx context.Context, gm *GroupMapping) (*GroupMapping, error)
- func (client *Client) CreateGroupMappingURL() string
- func (client *Client) CreateList(ctx context.Context, list List) (List, error)
- func (client *Client) CreateListURL() string
- func (client *Client) CreateMacro(ctx context.Context, macro Macro) (Macro, error)
- func (client *Client) CreateMacroURL() string
- func (client *Client) CreateNotificationChannel(ctx context.Context, channel NotificationChannel) (NotificationChannel, error)
- func (client *Client) CreatePolicy(ctx context.Context, policy Policy) (Policy, error)
- func (client *Client) CreatePolicyURL() string
- func (client *Client) CreateTeam(ctx context.Context, team Team) (Team, error)
- func (client *Client) CreateUser(ctx context.Context, user *User) (*User, error)
- func (client *Client) CreateUsersURL() string
- func (client *Client) CurrentTeamID(ctx context.Context) (int, error)
- func (client *Client) DeleteAlert(ctx context.Context, alertID int) error
- func (client *Client) DeleteAlertURL(alertID int) string
- func (client *Client) DeleteGroupMapping(ctx context.Context, id int) error
- func (client *Client) DeleteGroupMappingURL(id int) string
- func (client *Client) DeleteList(ctx context.Context, id int) error
- func (client *Client) DeleteListURL(id int) string
- func (client *Client) DeleteMacro(ctx context.Context, id int) error
- func (client *Client) DeleteMacroURL(id int) string
- func (client *Client) DeleteNotificationChannel(ctx context.Context, id int) error
- func (client *Client) DeletePolicy(ctx context.Context, policyID int) error
- func (client *Client) DeletePolicyURL(policyID int) string
- func (client *Client) DeleteTeam(ctx context.Context, id int) error
- func (client *Client) DeleteUser(ctx context.Context, id int) error
- func (client *Client) DeleteUserURL(id int) string
- func (client *Client) ErrorFromResponse(response *http.Response) error
- func (client *Client) GetAlertByID(ctx context.Context, alertID int) (Alert, error)
- func (client *Client) GetAlertByIDURL(alertID int) string
- func (client *Client) GetCurrentUser(ctx context.Context) (u *User, err error)
- func (client *Client) GetCurrentUserURL() string
- func (client *Client) GetGroupMapping(ctx context.Context, id int) (*GroupMapping, error)
- func (client *Client) GetGroupMappingURL(id int) string
- func (client *Client) GetListByID(ctx context.Context, id int) (List, error)
- func (client *Client) GetListURL(id int) string
- func (client *Client) GetMacroByID(ctx context.Context, id int) (Macro, error)
- func (client *Client) GetMacroByIDURL(id int) string
- func (client *Client) GetNotificationChannelById(ctx context.Context, id int) (NotificationChannel, error)
- func (client *Client) GetNotificationChannelByName(ctx context.Context, name string) (NotificationChannel, error)
- func (client *Client) GetNotificationChannelUrl(id int) string
- func (client *Client) GetNotificationChannelsUrl() string
- func (client *Client) GetPolicyByID(ctx context.Context, policyID int) (Policy, int, error)
- func (client *Client) GetPolicyURL(policyID int) string
- func (client *Client) GetTeamById(ctx context.Context, id int) (Team, error)
- func (client *Client) GetTeamURL(id int) string
- func (client *Client) GetTeamsURL() string
- func (client *Client) GetUserByEmail(ctx context.Context, email string) (*User, error)
- func (client *Client) GetUserById(ctx context.Context, id int) (*User, error)
- func (client *Client) GetUserByUsername(ctx context.Context, username string) (*User, error)
- func (client *Client) GetUserByUsernameURL(username string) string
- func (client *Client) GetUserIDByEmail(ctx context.Context, userRoles []UserRoles) ([]UserRoles, error)
- func (client *Client) GetUserUrl(id int) string
- func (client *Client) GetUsersLightURL() string
- func (client *Client) GetUsersUrl() string
- func (client *Client) UpdateAlert(ctx context.Context, alert Alert) (Alert, error)
- func (client *Client) UpdateAlertURL(alertID int) string
- func (client *Client) UpdateGroupMapping(ctx context.Context, gm *GroupMapping, id int) (*GroupMapping, error)
- func (client *Client) UpdateGroupMappingURL(id int) string
- func (client *Client) UpdateList(ctx context.Context, list List) (List, error)
- func (client *Client) UpdateListURL(id int) string
- func (client *Client) UpdateMacro(ctx context.Context, macro Macro) (Macro, error)
- func (client *Client) UpdateMacroURL(id int) string
- func (client *Client) UpdateNotificationChannel(ctx context.Context, channel NotificationChannel) (NotificationChannel, error)
- func (client *Client) UpdatePolicy(ctx context.Context, policy Policy) (Policy, error)
- func (client *Client) UpdatePolicyURL(policyID int) string
- func (client *Client) UpdateTeam(ctx context.Context, team Team) (Team, error)
- func (client *Client) UpdateUser(ctx context.Context, user *User) (*User, error)
- func (client *Client) UpdateUserURL(id int) string
- type ClientOption
- func WithExtraHeaders(headers map[string]string) ClientOption
- func WithIBMAPIKey(key string) ClientOption
- func WithIBMIamURL(url string) ClientOption
- func WithIBMInstanceID(instanceID string) ClientOption
- func WithInsecure(insecure bool) ClientOption
- func WithSysdigTeamID(teamID *int) ClientOption
- func WithSysdigTeamName(teamName string) ClientOption
- func WithToken(token string) ClientOption
- func WithURL(url string) ClientOption
- type Common
- type Criteria
- type CustomNotification
- type EntryPoint
- type GroupMapping
- type GroupMappingInterface
- type IAMTokenResponse
- type IBMAccessToken
- type IBMCommon
- type IBMMonitor
- type IBMRequest
- type Items
- type List
- type ListInterface
- type Macro
- type MacroCondition
- type MacroInterface
- type Monitor
- type MonitorCommon
- type NamespaceFilters
- type NotificationChannel
- type NotificationChannelInterface
- type NotificationChannelOptions
- type Policy
- type PolicyInterface
- type Requester
- type SegmentCondition
- type SysdigCapture
- type SysdigCommon
- type SysdigMonitor
- type SysdigRequest
- type SysdigSecure
- type Team
- type TeamInterface
- type TeamMap
- type UnixTimestamp
- type User
- type UserInterface
- type UserRoles
Constants ¶
View Source
const ( CreateAlertPath = "%s/api/alerts" DeleteAlertPath = "%s/api/alerts/%d" UpdateAlertPath = "%s/api/alerts/%d" GetAlertPath = "%s/api/alerts/%d" )
View Source
const ( GetMePath = "/api/users/me" AuthorizationHeader = "Authorization" ContentTypeHeader = "Content-Type" ContentTypeJSON = "application/json" ContentTypeFormURLEncoded = "x-www-form-urlencoded" )
View Source
const ( CreateGroupMappingPath = "%s/api/groupmappings" UpdateGroupMappingPath = "%s/api/groupmappings/%d" DeleteGroupMappingPath = "%s/api/groupmappings/%d" GetGroupMappingPath = "%s/api/groupmappings/%d" )
View Source
const ( IBMInstanceIDHeader = "IBMInstanceID" IBMIAMPath = "/identity/token" IBMGrantTypeFormValue = "grant_type" IBMApiKeyFormValue = "apikey" IBMAPIKeyGrantType = "urn:ibm:params:oauth:grant-type:apikey" SysdigTeamIDHeader = "SysdigTeamID" GetTeamByNamePath = "/api/v2/teams/light/name/" )
View Source
const ( CreateListPath = "%s/api/secure/falco/lists" GetListPath = "%s/api/secure/falco/lists/%d" UpdateListPath = "%s/api/secure/falco/lists/%d" DeleteListPath = "%s/api/secure/falco/lists/%d" )
View Source
const ( CreateMacroPath = "%s/api/secure/falco/macros" GetMacroByIDPath = "%s/api/secure/falco/macros/%d" UpdateMacroPath = "%s/api/secure/falco/macros/%d" DeleteMacroPath = "%s/api/secure/falco/macros/%d" )
View Source
const ( GetNotificationChannels = "%s/api/notificationChannels" GetNotificationChannel = "%s/api/notificationChannels/%d" )
View Source
const ( CreatePolicyPath = "%s/api/v2/policies" DeletePolicyPath = "%s/api/v2/policies/%d" UpdatePolicyPath = "%s/api/v2/policies/%d" GetPolicyPath = "%s/api/v2/policies/%d" )
View Source
const ( GetUsersLightPath = "%s/api/users/light" GetTeamsPath = "%s/api/teams" GetTeamPath = "%s/api/teams/%d" )
View Source
const ( GetUserByUsernamePath = "%s/api/users/%s" GetUserPath = "%s/api/users/%d" GetUsersPath = "%s/api/users" CreateUserPath = "%s/api/user/provisioning/" UpdateUserPath = "%s/api/users/%d" DeleteUserPath = "%s/api/users/%d" GetCurrentUserPath = "%s/api/users/me" )
Variables ¶
View Source
var GroupMappingNotFound = errors.New("group mapping not found")
Functions ¶
Types ¶
type Alert ¶ added in v1.4.0
type Alert struct {
ID int `json:"id,omitempty"`
Version int `json:"version,omitempty"`
Type string `json:"type"`
Name string `json:"name"`
Description string `json:"description"`
Enabled bool `json:"enabled"`
GroupName string `json:"groupName,omitempty"`
NotificationChannelIds []int `json:"notificationChannelIds"`
Filter string `json:"filter"`
Severity int `json:"severity"`
Timespan int `json:"timespan"`
CustomNotification *CustomNotification `json:"customNotification"`
TeamID int `json:"teamId,omitempty"`
AutoCreated bool `json:"autoCreated"`
SysdigCapture *SysdigCapture `json:"sysdigCapture"`
RateOfChange bool `json:"rateOfChange,omitempty"`
ReNotifyMinutes int `json:"reNotifyMinutes"`
ReNotify bool `json:"reNotify"`
Valid bool `json:"valid"`
SeverityLabel string `json:"severityLabel,omitempty"`
SegmentBy []string `json:"segmentBy"`
SegmentCondition *SegmentCondition `json:"segmentCondition"`
Criteria *Criteria `json:"criteria,omitempty"`
Monitor []*Monitor `json:"monitor,omitempty"`
Condition string `json:"condition"`
SeverityLevel int `json:"severityLevel,omitempty"`
}
type AlertInterface ¶ added in v1.4.0
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func (*Client) CreateAlert ¶ added in v1.4.0
func (*Client) CreateAlertURL ¶ added in v1.4.0
func (*Client) CreateGroupMapping ¶ added in v1.4.0
func (client *Client) CreateGroupMapping(ctx context.Context, gm *GroupMapping) (*GroupMapping, error)
func (*Client) CreateGroupMappingURL ¶ added in v1.4.0
func (*Client) CreateList ¶ added in v1.4.1
func (*Client) CreateListURL ¶ added in v1.4.1
func (*Client) CreateMacro ¶ added in v1.4.1
func (*Client) CreateMacroURL ¶ added in v1.4.1
func (*Client) CreateNotificationChannel ¶ added in v1.2.0
func (client *Client) CreateNotificationChannel(ctx context.Context, channel NotificationChannel) (NotificationChannel, error)
func (*Client) CreatePolicy ¶ added in v1.4.1
func (*Client) CreatePolicyURL ¶ added in v1.4.1
func (*Client) CreateTeam ¶
func (*Client) CreateUser ¶ added in v1.4.0
func (*Client) CreateUsersURL ¶ added in v1.4.0
func (*Client) CurrentTeamID ¶ added in v1.3.0
func (*Client) DeleteAlert ¶ added in v1.4.0
func (*Client) DeleteAlertURL ¶ added in v1.4.0
func (*Client) DeleteGroupMapping ¶ added in v1.4.0
func (*Client) DeleteGroupMappingURL ¶ added in v1.4.0
func (*Client) DeleteList ¶ added in v1.4.1
func (*Client) DeleteListURL ¶ added in v1.4.1
func (*Client) DeleteMacro ¶ added in v1.4.1
func (*Client) DeleteMacroURL ¶ added in v1.4.1
func (*Client) DeleteNotificationChannel ¶ added in v1.2.0
func (*Client) DeletePolicy ¶ added in v1.4.1
func (*Client) DeletePolicyURL ¶ added in v1.4.1
func (*Client) DeleteUser ¶ added in v1.4.0
func (*Client) DeleteUserURL ¶ added in v1.4.0
func (*Client) ErrorFromResponse ¶
func (*Client) GetAlertByID ¶ added in v1.4.0
func (*Client) GetAlertByIDURL ¶ added in v1.4.0
func (*Client) GetCurrentUser ¶ added in v1.4.0
func (*Client) GetCurrentUserURL ¶ added in v1.4.0
func (*Client) GetGroupMapping ¶ added in v1.4.0
func (*Client) GetGroupMappingURL ¶ added in v1.4.0
func (*Client) GetListByID ¶ added in v1.4.1
func (*Client) GetListURL ¶ added in v1.4.1
func (*Client) GetMacroByID ¶ added in v1.4.1
func (*Client) GetMacroByIDURL ¶ added in v1.4.1
func (*Client) GetNotificationChannelById ¶ added in v1.2.0
func (*Client) GetNotificationChannelByName ¶ added in v1.2.0
func (*Client) GetNotificationChannelUrl ¶ added in v1.2.0
func (*Client) GetNotificationChannelsUrl ¶ added in v1.2.0
func (*Client) GetPolicyByID ¶ added in v1.4.1
func (*Client) GetPolicyURL ¶ added in v1.4.1
func (*Client) GetTeamById ¶
func (*Client) GetTeamURL ¶
func (*Client) GetTeamsURL ¶
func (*Client) GetUserByEmail ¶ added in v1.4.0
func (*Client) GetUserById ¶ added in v1.4.0
func (*Client) GetUserByUsername ¶ added in v1.4.0
func (*Client) GetUserByUsernameURL ¶ added in v1.4.0
func (*Client) GetUserIDByEmail ¶
func (*Client) GetUserUrl ¶ added in v1.4.0
func (*Client) GetUsersLightURL ¶
func (*Client) GetUsersUrl ¶ added in v1.4.0
func (*Client) UpdateAlert ¶ added in v1.4.0
func (*Client) UpdateAlertURL ¶ added in v1.4.0
func (*Client) UpdateGroupMapping ¶ added in v1.4.0
func (client *Client) UpdateGroupMapping(ctx context.Context, gm *GroupMapping, id int) (*GroupMapping, error)
func (*Client) UpdateGroupMappingURL ¶ added in v1.4.0
func (*Client) UpdateList ¶ added in v1.4.1
func (*Client) UpdateListURL ¶ added in v1.4.1
func (*Client) UpdateMacro ¶ added in v1.4.1
func (*Client) UpdateMacroURL ¶ added in v1.4.1
func (*Client) UpdateNotificationChannel ¶ added in v1.2.0
func (client *Client) UpdateNotificationChannel(ctx context.Context, channel NotificationChannel) (NotificationChannel, error)
func (*Client) UpdatePolicy ¶ added in v1.4.1
func (*Client) UpdatePolicyURL ¶ added in v1.4.1
func (*Client) UpdateTeam ¶
func (*Client) UpdateUser ¶ added in v1.4.0
func (*Client) UpdateUserURL ¶ added in v1.4.0
type ClientOption ¶
type ClientOption func(c *config)
func WithExtraHeaders ¶
func WithExtraHeaders(headers map[string]string) ClientOption
func WithIBMAPIKey ¶ added in v1.1.0
func WithIBMAPIKey(key string) ClientOption
func WithIBMIamURL ¶ added in v1.1.0
func WithIBMIamURL(url string) ClientOption
func WithIBMInstanceID ¶ added in v1.1.0
func WithIBMInstanceID(instanceID string) ClientOption
func WithInsecure ¶
func WithInsecure(insecure bool) ClientOption
func WithSysdigTeamID ¶ added in v1.3.0
func WithSysdigTeamID(teamID *int) ClientOption
func WithSysdigTeamName ¶ added in v1.3.0
func WithSysdigTeamName(teamName string) ClientOption
func WithToken ¶
func WithToken(token string) ClientOption
func WithURL ¶
func WithURL(url string) ClientOption
type Common ¶
type Common interface {
UserInterface
TeamInterface
NotificationChannelInterface
}
type CustomNotification ¶ added in v1.4.0
type EntryPoint ¶
type GroupMapping ¶ added in v1.4.0
type GroupMappingInterface ¶ added in v1.4.0
type GroupMappingInterface interface {
Base
CreateGroupMapping(ctx context.Context, gm *GroupMapping) (*GroupMapping, error)
UpdateGroupMapping(ctx context.Context, gm *GroupMapping, id int) (*GroupMapping, error)
DeleteGroupMapping(ctx context.Context, id int) error
GetGroupMapping(ctx context.Context, id int) (*GroupMapping, error)
}
type IAMTokenResponse ¶ added in v1.1.0
type IBMAccessToken ¶ added in v1.1.0
type IBMAccessToken string
type IBMMonitor ¶ added in v1.1.0
type IBMMonitor interface {
IBMCommon
MonitorCommon
}
func NewIBMMonitor ¶ added in v1.1.0
func NewIBMMonitor(opts ...ClientOption) IBMMonitor
type IBMRequest ¶ added in v1.1.0
type IBMRequest struct {
// contains filtered or unexported fields
}
func (*IBMRequest) CurrentTeamID ¶ added in v1.3.0
func (ir *IBMRequest) CurrentTeamID(ctx context.Context) (int, error)
type ListInterface ¶ added in v1.4.1
type Macro ¶ added in v1.4.1
type Macro struct {
ID int `json:"id,omitempty"`
Version int `json:"version,omitempty"`
Name string `json:"name"`
Condition MacroCondition `json:"condition"`
Append bool `json:"append"`
}
type MacroCondition ¶ added in v1.4.1
type MacroCondition struct {
Condition string `json:"condition"`
}
type MacroInterface ¶ added in v1.4.1
type MonitorCommon ¶ added in v1.4.0
type MonitorCommon interface {
AlertInterface
}
type NamespaceFilters ¶ added in v1.1.0
type NamespaceFilters struct {
IBMPlatformMetrics *string `json:"ibmPlatformMetrics"`
}
type NotificationChannel ¶ added in v1.2.0
type NotificationChannelInterface ¶ added in v1.2.0
type NotificationChannelInterface interface {
Base
GetNotificationChannelById(ctx context.Context, id int) (NotificationChannel, error)
GetNotificationChannelByName(ctx context.Context, name string) (NotificationChannel, error)
CreateNotificationChannel(ctx context.Context, channel NotificationChannel) (NotificationChannel, error)
UpdateNotificationChannel(ctx context.Context, channel NotificationChannel) (NotificationChannel, error)
DeleteNotificationChannel(ctx context.Context, id int) error
}
type NotificationChannelOptions ¶ added in v1.2.0
type NotificationChannelOptions struct {
EmailRecipients []string `json:"emailRecipients,omitempty"` // Type: email
SnsTopicARNs []string `json:"snsTopicARNs,omitempty"` // Type: SNS
APIKey string `json:"apiKey,omitempty"` // Type: VictorOps
RoutingKey string `json:"routingKey,omitempty"` // Type: VictorOps
Url string `json:"url,omitempty"` // Type: OpsGenie, Webhook and Slack
Channel string `json:"channel,omitempty"` // Type: Slack
Account string `json:"account,omitempty"` // Type: PagerDuty
ServiceKey string `json:"serviceKey,omitempty"` // Type: PagerDuty
ServiceName string `json:"serviceName,omitempty"` // Type: PagerDuty
AdditionalHeaders map[string]interface{} `json:"additionalHeaders,omitempty"` // Type: Webhook
Region string `json:"region,omitempty"` // Type: OpsGenie
NotifyOnOk bool `json:"notifyOnOk"`
NotifyOnResolve bool `json:"notifyOnResolve"`
SendTestNotification bool `json:"sendTestNotification"`
}
type Policy ¶ added in v1.4.1
type Policy struct {
ID int `json:"id,omitempty"`
Name string `json:"name"`
Description string `json:"description"`
Severity int `json:"severity"`
Enabled bool `json:"enabled"`
RuleNames []string `json:"ruleNames"`
Actions []Action `json:"actions"`
Scope string `json:"scope,omitempty"`
Version int `json:"version,omitempty"`
NotificationChannelIds []int `json:"notificationChannelIds"`
Type string `json:"type"`
Runbook string `json:"runbook"`
}
type PolicyInterface ¶ added in v1.4.1
type SegmentCondition ¶ added in v1.4.0
type SegmentCondition struct {
Type string `json:"type"`
}
type SysdigCapture ¶ added in v1.4.0
type SysdigCapture struct {
Name string `json:"name"`
Filters string `json:"filters,omitempty"`
Duration int `json:"duration"`
Type string `json:"type,omitempty"`
BucketName string `json:"bucketName"`
Folder string `json:"folder,omitempty"`
Enabled bool `json:"enabled"`
StorageID interface{} `json:"storageId,omitempty"`
}
type SysdigCommon ¶ added in v1.1.0
type SysdigCommon interface {
Common
GroupMappingInterface
}
type SysdigMonitor ¶ added in v1.1.0
type SysdigMonitor interface {
SysdigCommon
MonitorCommon
}
func NewSysdigMonitor ¶ added in v1.1.0
func NewSysdigMonitor(opts ...ClientOption) SysdigMonitor
type SysdigRequest ¶ added in v0.7.3
type SysdigRequest struct {
// contains filtered or unexported fields
}
func (*SysdigRequest) CurrentTeamID ¶ added in v1.3.0
func (sr *SysdigRequest) CurrentTeamID(ctx context.Context) (int, error)
type SysdigSecure ¶ added in v1.1.0
type SysdigSecure interface {
SysdigCommon
PolicyInterface
ListInterface
MacroInterface
}
func NewSysdigSecure ¶ added in v1.1.0
func NewSysdigSecure(opts ...ClientOption) SysdigSecure
type Team ¶
type Team struct {
UserRoles []UserRoles `json:"userRoles,omitempty"`
Description string `json:"description"`
Name string `json:"name"`
ID int `json:"id,omitempty"`
Version int `json:"version,omitempty"`
Origin string `json:"origin,omitempty"`
LastUpdated int64 `json:"lastUpdated,omitempty"`
EntryPoint *EntryPoint `json:"entryPoint,omitempty"`
Theme string `json:"theme"`
CustomerID int `json:"customerId,omitempty"`
DateCreated int64 `json:"dateCreated,omitempty"`
Products []string `json:"products,omitempty"`
Show string `json:"show,omitempty"`
Immutable bool `json:"immutable,omitempty"`
CanUseSysdigCapture *bool `json:"canUseSysdigCapture,omitempty"`
CanUseCustomEvents *bool `json:"canUseCustomEvents,omitempty"`
CanUseAwsMetrics *bool `json:"canUseAwsMetrics,omitempty"`
CanUseBeaconMetrics *bool `json:"canUseBeaconMetrics,omitempty"`
UserCount int `json:"userCount,omitempty"`
Filter string `json:"filter,omitempty"`
NamespaceFilters *NamespaceFilters `json:"namespaceFilters,omitempty"`
DefaultTeam bool `json:"default,omitempty"`
}
type TeamInterface ¶
type TeamInterface interface {
Base
GetUserIDByEmail(ctx context.Context, userRoles []UserRoles) ([]UserRoles, error)
GetTeamById(ctx context.Context, id int) (t Team, err error)
CreateTeam(ctx context.Context, tRequest Team) (t Team, err error)
UpdateTeam(ctx context.Context, tRequest Team) (t Team, err error)
DeleteTeam(ctx context.Context, id int) error
}
type UnixTimestamp ¶ added in v1.1.0
type UnixTimestamp int64
type UserInterface ¶ added in v1.4.0
type UserInterface interface {
GetUserById(ctx context.Context, id int) (*User, error)
GetUserByUsername(ctx context.Context, username string) (*User, error)
GetUserByEmail(ctx context.Context, email string) (*User, error)
CreateUser(ctx context.Context, user *User) (*User, error)
UpdateUser(ctx context.Context, user *User) (*User, error)
DeleteUser(ctx context.Context, id int) error
GetCurrentUser(ctx context.Context) (u *User, err error)
}
Click to show internal directories.
Click to hide internal directories.