Summary

The copyDashboard() mutation creates a clone of an existing dashboard. Use it to duplicate a dashboard with its widgets and settings intact, then modify the copy without affecting the original. You can copy a dashboard within the same repository or view, or copy it to a different one.

Syntax

graphql
copyDashboard(
      id: String!,
      targetSearchDomainName: String,
      sourceSearchDomainName: String!,
      name: String!
   ): CopyDashboardMutation!

Provide the id of the dashboard to copy. Specify the source repository or view name in sourceSearchDomainName and the new dashboard name in name. The targetSearchDomainName argument is optional; omit it to copy the dashboard into the same repository or view.

The mutation returns a CopyDashboardMutation! object, which includes the new dashboard's identifier and other properties. Request dashboard.id to obtain the identifier of the new dashboard. Use this identifier with subsequent mutations such as updateDashboard().

Example

Raw
graphql
mutation {
  copyDashboard(
         id: "abc123",
         sourceSearchDomainName: "humio", 
         targetSearchDomainName: "sandbox",
         name: "hosters" ) 
  { dashboard {name, id, searchDomain { id, name } } }
}
Mac OS or Linux (curl)
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d @- << EOF
{"query" : "mutation {
  copyDashboard(
         id: \"abc123\",
         sourceSearchDomainName: \"humio\", 
         targetSearchDomainName: \"sandbox\",
         name: \"hosters\" ) 
  { dashboard {name, id, searchDomain { id, name } } }
}"
}
EOF
Mac OS or Linux (curl) One-line
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d @- << EOF
{"query" : "mutation {
  copyDashboard(
         id: \"abc123\",
         sourceSearchDomainName: \"humio\", 
         targetSearchDomainName: \"sandbox\",
         name: \"hosters\" ) 
  { dashboard {name, id, searchDomain { id, name } } }
}"
}
EOF
Windows Cmd and curl
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql ^
    -H "Authorization: Bearer $TOKEN" ^
    -H "Content-Type: application/json" ^
    -d @'{"query" : "mutation { ^
  copyDashboard( ^
         id: \"abc123\", ^
         sourceSearchDomainName: \"humio\",  ^
         targetSearchDomainName: \"sandbox\", ^
         name: \"hosters\" )  ^
  { dashboard {name, id, searchDomain { id, name } } } ^
}" ^
} '
Windows Powershell and curl
powershell
curl.exe -X POST 
    -H "Authorization: Bearer $TOKEN"
    -H "Content-Type: application/json"
    -d '{"query" : "mutation {
  copyDashboard(
         id: \"abc123\",
         sourceSearchDomainName: \"humio\", 
         targetSearchDomainName: \"sandbox\",
         name: \"hosters\" ) 
  { dashboard {name, id, searchDomain { id, name } } }
}"
}'
    "$YOUR_LOGSCALE_URL/graphql"
Perl
perl
#!/usr/bin/perl

use HTTP::Request;
use LWP;

my $TOKEN = "TOKEN";

my $uri = '$YOUR_LOGSCALE_URL/graphql';

my $query = "mutation {
  copyDashboard(
         id: \"abc123\",
         sourceSearchDomainName: \"humio\", 
         targetSearchDomainName: \"sandbox\",
         name: \"hosters\" ) 
  { dashboard {name, id, searchDomain { id, name } } }
}";
$query =~ s/\n/ /g;
my $json = sprintf('{"query" : "%s"}',$query);
my $req = HTTP::Request->new("POST", $uri );

$req->header("Authorization" => "Bearer $TOKEN");
$req->header("Content-Type" => "application/json");

$req->content( $json );

my $lwp = LWP::UserAgent->new;

my $result = $lwp->request( $req );

print $result->{"_content"},"\n";
Python
python
#! /usr/local/bin/python3

import requests

url = '$YOUR_LOGSCALE_URL/graphql'
mydata = r'''{"query" : "mutation {
  copyDashboard(
         id: \"abc123\",
         sourceSearchDomainName: \"humio\", 
         targetSearchDomainName: \"sandbox\",
         name: \"hosters\" ) 
  { dashboard {name, id, searchDomain { id, name } } }
}"
}'''

resp = requests.post(url,
                     data = mydata,
                     headers = {
   "Authorization" : "Bearer $TOKEN",
   "Content-Type" : "application/json"
}
)

print(resp.text)
Node.js
javascript
const https = require('https');

const data = JSON.stringify(
    {"query" : "mutation {
  copyDashboard(
         id: \"abc123\",
         sourceSearchDomainName: \"humio\", 
         targetSearchDomainName: \"sandbox\",
         name: \"hosters\" ) 
  { dashboard {name, id, searchDomain { id, name } } }
}"
}
);


const options = {
  hostname: '$YOUR_LOGSCALE_URL',
  path: 'graphql',
  port: 443,
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length,
    Authorization: 'BEARER ' + process.env.TOKEN,
    'User-Agent': 'Node',
  },
};

const req = https.request(options, (res) => {
  let data = '';
  console.log(`statusCode: ${res.statusCode}`);

  res.on('data', (d) => {
    data += d;
  });
  res.on('end', () => {
    console.log(JSON.parse(data).data);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.write(data);
req.end();
Example Responses
Success (HTTP Response Code 200 OK)
json
{
  "data": {
    "copyDashboard": {
      "dashboard": {
        "name": "hosters",
        "id": "def456",
        "searchDomain": {
          "id": "sandbox_jSl8Iz25KhDiPQzXYE6YDetG",
          "name": "sandbox_jSl8Iz25KhDiPQzXYE6YDetG"
        }
      }
    }
  }
}

Input Parameters

Provide the id of the dashboard to copy and a unique name for the new dashboard. Use the dashboardsPage() query to retrieve dashboard identifiers. See the preceding Related section for an example query. Optionally, provide targetSearchDomainName to copy the dashboard to a different repository or view.

Table: Input Parameters & Datatypes

Parameter Type Required Default Description
This table contains all input parameters for this mutation.
id string yes   The unique identifier of the dashboard to copy. Retrieve this value from the dashboardsPage() query.
name string yes   The name for the new dashboard. The name must be unique within the target repository or view.
sourceSearchDomainName string yes   The name of the repository or view that contains the dashboard to copy.
targetSearchDomainName string     The name of the repository or view where the copied dashboard will be placed. If omitted, the mutation copies the dashboard into the source repository or view, provided the new name differs from the original.

Returned Values

The mutation returns a CopyDashboardMutation! object. This object contains the new dashboard's properties, including its identifier. Use the returned identifier with mutations such as updateDashboard() to make further changes to the copied dashboard.

Table: CopyDashboardMutation Datatype

ParameterTypeRequiredDefaultStabilityAvailabilityDescription
dashboardDashboardyes Long-Term The dashboard to copy. See Dashboard.

The CopyDashboardMutation type includes a dashboard field that returns the full Dashboard datatype. The following table describes the fields available on that sub-type.

Table: Dashboard Datatype

ParameterTypeRequiredDefaultStabilityAvailabilityDescription
allowedActionsAssetActionyes Short-Term The allowed asset actions. See AssetAction Table). This is feature is a preview and may be changed.
createdInfoAssetCommitMetadata  Long-Term Metadata related to the creation of the dashboard. See AssetCommitMetadata.
defaultFilterDashboardFilter  Long-Term The default filter used with the dashboard (see DashboardFilter Table).
defaultSharedTimeEnabledBooleanyes Long-Term Whether the shared time by default is enabled.
defaultSharedTimeEndStringyes Long-Term The default shared ending time.
defaultSharedTimeStartStringyes Long-Term The default shared starting time.
descriptionString  Long-Term A description of the dashboard.
displayNameStringyes Long-Term The display name of the dashboard.
filtersDashboardFilteryes Long-Term The filters used with the dashboard. See DashboardFilter.
idStringyes Long-Term The unique identifier for the dashboard.
isStarredBooleanyes Long-Term Whether the dashboard is marked with a star.
labelsStringyes Long-Term Any labels associated with the dashboard.
modifiedInfoAssetCommitMetadata  Long-Term Metadata related to the latest modification of the dashboard. See AssetCommitMetadata.
nameStringyes Long-Term The name of the dashboard.
packagePackageInstallation  Long-Term The package, if there is one, in which the dashboard is included (see PackageInstallation Table).
packageIdVersionedPackageSpecifier  Long-Term The unique identifiers of the package. VersionedPackageSpecifier is a scalar.
parametersDashboardParameteryes Long-Term List of dashboard parameters (see DashboardParameter Table).
readOnlyTokensDashboardLinkyes Long-Term List of tokens used to access the dashboard without logging in. Useful for wall mounted dashboards or public dashboards. See DashboardLink.
resourceStringyes Short-Term The resource identifier for this dashboard.
searchDomainSearchDomainyes Long-Term The search domain for the dashboard. See SearchDomain.
sectionsSectionyes Long-Term The sections for the dashboard. See Section.
seriesSeriesConfigyes Long-Term The series configuration for the dashboard. See SeriesConfig.
seriesColorPaletteString  Short-Term Stability: Short-term
templateYamlStringyes  deprecated in 1.225A YAML formatted string that describes the dashboard. It does not contain links or permissions, and is safe to share and use for making copies of a dashboard.
timeJumpSizeInMsInt  Long-Term The skip time in milliseconds for the dashboard.
updateFrequencyDashboardUpdateFrequencyTypeyes Long-Term The frequency in which dashboard is updated. See DashboardUpdateFrequencyType, and the explanations under the DashboardParameter.
widgetsWidgetyes Long-Term Widgets for the dashboard (see Widget Table).
yamlTemplateYAMLyes Long-Term A yaml formatted string that describes the dashboard. YAML is a scalar. It doesn't contain links or permissions, and is safe to share and use for making copies of a dashboard. This replaced templateYaml starting in LogScale version 1.165.